[英]OnClickListener and Toast not cooperating
我一直在為Android應用程序分配該程序,盡管Eclipse的代碼沒有問題,但我的手機似乎無法運行它。 我是Android編程的新手,所以請多多包涵。
這個Android應用程式是空白活動中的簡單“猜我的號碼”游戲。 用戶可以從1到100進行猜測,在EditText視圖中輸入答案,然后按一下按鈕提交。 該設計很好,但是使其與OnClickListener一起使用很麻煩。 按下按鈕后,該應用在我的GS3上崩潰。 最麻煩的部分是使按鈕動作並以Toast的形式提供輸出。
隨附的是MainActivity.java中的代碼。
我設法通過StackOverflow以及我所知道的一些Java代碼獲取了不同的代碼片段。 結果不完美; 值得嘗試。
您可能會在這里看到我的完整項目 。 謝謝您的寶貴時間,我非常感謝我能提供的任何幫助。
package com.lookjohn.guessnumber;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Random random;
Button button;
EditText text;
int input;
int MIN = 1, MAX = 100;
int comp;
int guesses;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
random = new Random();
button = (Button)findViewById(R.id.button1);
text = (EditText)findViewById(R.id.editText1);
comp = random.nextInt(MAX - MIN + 1) + MIN;
guesses = 0;
button.setOnClickListener(myhandler1);
}
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
String value = text.getText().toString(); // Get value from input from editTextView
input = Integer.parseInt(value); // Turn string into integer
do{
guesses++;
if(input > comp)
Toast.makeText(MainActivity.this,
"Number is too big.",
Toast.LENGTH_SHORT).show();
else if (input < comp)
Toast.makeText(MainActivity.this,
"Number is too small.",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this,
"Good job! That was correct." +
"You made " + guesses + " guesses.",
Toast.LENGTH_SHORT).show();
} while(input != comp);
}
};
編輯:我發現您的代碼中的其他幾個問題。 首先,您的EditText的輸入類型是phone。 它應該是數字。 此外,用戶可以提交空白的編輯文本,當您調用parseInt
時,這將導致應用程序崩潰。 我已經在下面對您的代碼進行的一些更改中解決了這一問題。
問題出在你的循環中。 按下提交后,您將進入無限循環。 我認為您期望用戶能夠提交多個猜測。 但是,如果用戶輸入了“ 3”,而您的計算值為“ 10”,則您的循環所做的就是一次又一次地確定3!= 10。 這將導致UI凍結。
刪除while循環將使Toast顯示:
public void onClick(View v) {
// If you want to implement a max number of guesses, detect the
// number of guesses and return from the method.
if (guesses > 5) {
Toast.makeText(MainActivity.this, "Out of guesses!", Toast.LENGTH_SHORT);
return;
}
String value = text.getText().toString(); // Get value from input from editTextView
// If the user submits an empty EditText, return so we don't crash when parsing int
if (value.isEmpty()) {
Toast.makeText(MainActivity.this, "You must enter a guess!", Toast.LENGTH_SHORT);
return;
}
input = Integer.parseInt(value); // Turn string into integer
guesses++;
if(input > comp)
Toast.makeText(MainActivity.this,
"Number is too big.",
Toast.LENGTH_SHORT).show();
else if (input < comp)
Toast.makeText(MainActivity.this,
"Number is too small.",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this,
"Good job! That was correct." +
"You made " + guesses + " guesses.",
Toast.LENGTH_SHORT).show();
}
然后在main.xml中,將inputType從phone
更改為number
:
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_alignRight="@+id/button1"
android:layout_centerVertical="true"
android:ems="10"
android:inputType="number" />
您已在點擊偵聽器中為guess
變量進行了無限循環,該變量一直在增加並且不會停止。
只需刪除do{...}while
循環,然后嘗試即可。 因為似乎不需要使用它。
if(input > comp)
Toast.makeText(MainActivity.this,
"Number is too big.",
Toast.LENGTH_SHORT).show();
else if (input < comp)
Toast.makeText(MainActivity.this,
"Number is too small.",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this,
"Good job! That was correct." +
"You made " + guesses + " guesses.",
Toast.LENGTH_SHORT).show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.