私は、練習のために一種の脳トレーナーアプリケーションを作成しています。加算または減算される2つの数値があり、結果を推測する必要があります。 4つのボタンがあり、1つは正しい値で、残りの3つは乱数です。私はすべてのことを行う関数setQuestion()を持っています。 これらのボタンのいくつかを押すと、数字が正しいかどうかがチェックされ、スコアが更新されます。そして、新しい値を作成するように関数setQuestion()を呼び出す必要がありますが、何らかの理由でボタンをクリックするとアプリケーションがクラッシュします。関数が別の関数から呼び出された後にアプリケーションが機能しなくなる
setQuestion関数は、アプリケーションのオープン時に実行されるため機能します。 これらの2つの機能のコードは次のとおりです。
public void setQuestion(){
int firstNumber = randomNumberGenerator.nextInt(101);
int secondNumber = randomNumberGenerator.nextInt(101);
int operation = randomNumberGenerator.nextInt(2);
TextView firstNumberTextView = (TextView) findViewById(R.id.firstNumber);
TextView secondNumberTextView = (TextView) findViewById(R.id.secondNumber);
TextView operationTextView = (TextView) findViewById(R.id.operation);
if(operation == 0){
sum = firstNumber + secondNumber;
operationTextView.setText("+");
}
else{
while (secondNumber > firstNumber){
secondNumber = randomNumberGenerator.nextInt(101);
}
operationTextView.setText("-");
sum = firstNumber - secondNumber;
}
firstNumberTextView.setText(String.valueOf(firstNumber));
secondNumberTextView.setText(String.valueOf(secondNumber));
int operation1 = randomNumberGenerator.nextInt(2);
int operation2 = randomNumberGenerator.nextInt(2);
int operation3 = randomNumberGenerator.nextInt(2);
int answer1 = 0;
int answer2 = 0;
int answer3 = 0;
switch (operation1){
case 0:
answer1 = sum + randomNumberGenerator.nextInt(9) +1 +1;
break;
case 1:
int temp = randomNumberGenerator.nextInt(9) +1;
if(sum > temp){
answer1 = sum - temp;
}
else{
answer1 = temp;
}
}
switch (operation2){
case 0:
answer2 = sum + randomNumberGenerator.nextInt(9) +1;
break;
case 1:
int temp = randomNumberGenerator.nextInt(9) +1;
if(sum > temp){
answer2 = sum - temp;
}
else{
answer2 = temp;
}
}
switch (operation3){
case 0:
answer3 = sum + randomNumberGenerator.nextInt(9) +1;
break;
case 1:
int temp = randomNumberGenerator.nextInt(9) +1;
if(sum > temp){
answer3 = sum - temp;
}
else{
answer3 = temp;
}
}
buttonMap.add(0);
buttonMap.add(1);
buttonMap.add(2);
buttonMap.add(3);
Collections.shuffle(buttonMap);
int[] valArray = {sum, answer1, answer2, answer3};
for (int i = 0; i < buttonMap.size(); i++) {
int id = getResources().getIdentifier("b"+buttonMap.get(i), "id", getPackageName());
Button button = (Button) findViewById(id);
button.setText(String.valueOf(valArray[i]));
}
}
そして、他:
public void answer(View view){
Button clickedButton = (Button) view;
String clickedValue = clickedButton.getText().toString();
int clickedValueInt = Integer.parseInt(clickedValue);
TextView allQuestion = (TextView) findViewById(R.id.totalQuestions);
numberOfQuestions = Integer.parseInt(allQuestion.getText().toString());
TextView correctQuestions = (TextView) findViewById(R.id.correctQuestions);
numberOfCorrectQuestions = Integer.parseInt(correctQuestions.getText().toString());
if(clickedValueInt == sum){
numberOfCorrectQuestions++;
correctQuestions.setText(String.valueOf(numberOfCorrectQuestions));
}
System.out.println(numberOfCorrectQuestions);
numberOfQuestions++;
allQuestion.setText(String.valueOf(numberOfQuestions));
setQuestion();
}
そしてここでは、logcatからテキストです。
02-26 02:34:19.965 305-305 /? E/lowmemorykiller:エラー書き込み/ proc/18289/oom_score_adj; errno = 22 02-26 02:34:19.987 850-6076 /? E/ReportTools:これはベータ版ユーザービルドではありません 02-26 02:34:20.167 850-1922 /? E/HsmCoreServiceImpl:onTransact in code:102 02-26 02:34:20.221 27755-27832 /? E/PackageLogInfoManager:checkPackageLogState、cr:[email protected]、packageNames:null 02-26 02:34:20.327 18468-18486 /? E/linker:readlink( '/ proc/self/fd/23')が失敗しました:許可が拒否されました[fd = 23] 02-26 02:34:20.328 18468-18486 /? E /リンカー:警告:ライブラリ "/system/lib64/hw/gralloc.hi6250.so"のためのrealpathを得ることができません。指定された名前を使用します。 02-26 02:34:20.335 18468-18486 /? E/linker:readlink( '/ proc/self/fd/23')が失敗しました:許可が拒否されました[fd = 23] 02-26 02:34:20.335 18468-18486 /? E /リンカー:警告:ライブラリ "libion.so"のrealpathを取得できません。指定された名前を使用します。 02-26 02:34:20.461 18468-18468 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfoはmyLocationを返す 02-26 02:34:20.463 18468-18485 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfo戻り値myLocation 02-26 02:34:20.522 9539-9608 /? E/HwLauncher:SettingsEx、そのようなフィールドはありません。 02-26 02:34:20.525 18468-18468 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfo戻り値myLocation 02-26 02:34:20.929 1854-1854 /? E/RegisteredServicesCache:invalidateCache set mNeedToastTableFull
これは大きな機能です – user7568042
私の防衛では、私はAndroidとjavaを5日前に開始しました。しかし、私はもっと機能を小さくするべきであることを知っていますよね? –