我很確定我的XML或清單中沒有問題。問題必須出現在我的代碼中(因爲我稍微更改了代碼並停止工作)。該應用程序甚至開始之前崩潰。我得到的錯誤是:不幸的是,該應用程序已停止Android Studio
了java.lang.RuntimeException:無法啓動活動 ComponentInfo {com.trainer.braintrainer/com.trainer.braintrainer.MainActivity}: 顯示java.lang.NullPointerException:試圖調用上的空 對象引用 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app虛擬方法 '無效 android.widget.Button.setText(java.lang.CharSequence中)'。 ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.ap在android.android.os.Handler.dispatchMessage(Handler.java:102) android.app.ActivityThread $ H.handleMessage os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android。 internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起來自:java.lang.NullPointerException:Att搶先在調用虛擬方法 「空隙android.widget.Button.setText(java.lang.CharSequence中)」上 在 com.trainer.braintrainer.MainActivity.generateQuestion(MainActivity.java:60)空對象引用 com.trainer.braintrainer.MainActivity.onCreate(MainActivity.java:101) 在android.app.Activity.performCreate(Activity.java:6237) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java .lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)06-16 08:01:16.547 24091-24091/com.trainer.braintrainer I/Process:發送 信號。PID:24091 SIG:9
下面是我主要的Java代碼:
package com.trainer.braintrainer;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
ArrayList<Integer> answers=new ArrayList<Integer>();
Random rand = new Random();
int locationOfCorrectAnswer;
Button startButton;
Button button0;
Button button1;
Button button2;
Button button3;
int score=0;
int numberOfQuestions=0;
TextView answerMessage;
String message;
TextView scoreText;
TextView sumTextView;
TextView timerText;
public void generateQuestion(){
int a=rand.nextInt(21);
int b=rand.nextInt(21);
sumTextView.setText(Integer.toString(a) + " + " + Integer.toString(b));
locationOfCorrectAnswer=rand.nextInt(4);
answers.clear();
int inCorrectAns;
for (int i=0;i<=3;i++){
if (i==locationOfCorrectAnswer){
answers.add(a+b);
}else{
inCorrectAns=rand.nextInt(50);
while (inCorrectAns==a+b){
inCorrectAns=rand.nextInt(50);
}
answers.add(inCorrectAns);
}
}
button0.setText(Integer.toString(answers.get(0)));
button1.setText(Integer.toString(answers.get(1)));
button2.setText(Integer.toString(answers.get(2)));
button3.setText(Integer.toString(answers.get(3)));
}
public void startButton(View view){
startButton.setVisibility(View.INVISIBLE);
}
public void answerFunction(View view){
int tappedLocation= (int)view.getTag();
if (tappedLocation==locationOfCorrectAnswer){
message="Correct!";
score++;
}else{
message="Wrong!";
}
answerMessage.setText(message);
scoreText.setText(Integer.toString(score) + "/" + Integer.toString(numberOfQuestions));
numberOfQuestions++;
generateQuestion();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton=(Button)findViewById(R.id.button5);
answerMessage=(TextView)findViewById(R.id.messageView);
sumTextView=(TextView)findViewById(R.id.sumTextView);
scoreText=(TextView)findViewById(R.id.scoreText);
timerText=(TextView)findViewById(R.id.timerText);
generateQuestion();
new CountDownTimer(30100,1000){
@Override
public void onTick(long millisUntilFinished) {
int seconds=(int) millisUntilFinished/1000;
timerText.setText(Integer.toString(seconds)+"s");
}
@Override
public void onFinish() {
answerMessage.setText("Done");
}
}.start();
button0=(Button)findViewById(R.id.ans1);
button1=(Button)findViewById(R.id.ans2);
button2=(Button)findViewById(R.id.ans3);
button3=(Button)findViewById(R.id.ans4);
}
}
你添加一個斷點到崩潰的第一個活動之前分配給該按鈕的各自的看法?你看到代碼有多遠?你最近有沒有改變一些東西來實現這一點?這個問題很可能在你的XML中。 –
'嘗試在空對象引用上調用虛擬方法'void android.widget.Button.setText(java.lang.CharSequence)'意味着你試圖調用'setText'方法的變量未被賦值。檢查所有變量是否正在分配_before_他們使用。 – Clonkex
此外,你說_「因爲我稍微改變了我的代碼,它停止了工作」_...你什麼改變了?認真的說,這應該是一個很大的線索,你看起來第一個地方。 – Clonkex