0

アプリがクラッシュする原因がわかりません.logcatはMAINから致命的な例外が発生したと言っています.これが何を意味するのか本当にわかりません. 最初のアクティビティは正常にロードされますが、ボタンを押してロードするとすぐに 2 番目のアクティビティが停止します。質問が長すぎるか、すでに質問されている場合は申し訳ありません。以前に質問された質問に投稿された多くのことを試しました。

マニフェスト:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name=".QuizActivity"
        android:theme="@android:style/Theme.NoTitleBar"
        android:exported="false"
         >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT">

            </category>                
        </intent-filter>

    </activity>

    <activity
        android:name=".MainMenu"
        android:theme="@android:style/Theme.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>    
    </activity>

</application>

最初の活動

public class MainMenu extends Activity {
Button quizButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_mainmenu);

    quizButton = (Button)findViewById(R.id.launchQuiz);

    quizButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (v.getId() == quizButton.getId()) {
                Intent launchQuizActivity = new Intent(MainMenu.this, QuizActivity.class);
                MainMenu.this.startActivity(launchQuizActivity);

            }
        }
    });
}
}

2番目のものは次のとおりです。

public class QuizActivity extends Activity {

Intent returnHome = new Intent(QuizActivity.this, matt.apps.quiz.MainMenu.class);

String questions[] = {"What month is it?","What OS is this?" };
String lChoices[] = {"July","IOS"};
String cChoices[] = {"August","Android"};
String rChoices[] = {"October", "Windows?"};
int answers[] = {R.id.lButton,R.id.cButton };

boolean correct = false;
int numCorrect = 0;
int numWrong = 0;
int btnClicked;
int i = -1;
int t = 0;

Button lButton;
Button cButton;
Button rButton;
Button nextButton;
TextView questionTV;
TextView greetingTV;



public boolean getCorrect(int id) {
    if (id == answers[i]) {
        correct = true;
    } else {
    correct = false;
    }
    return correct;
}

OnClickListener clicker = new OnClickListener() {
    //TODO change to method to handle answers
                @Override
                public void onClick(View v) {

                    btnClicked = v.getId();

                    if (btnClicked == R.id.nextButton) { // next button

                        i += 1;

                        if (i <= questions.length) {
                        questionTV.setText(questions[i]);
                        lButton.setText(lChoices[i]);
                        cButton.setText(cChoices[i]);
                        rButton.setText(rChoices[i]);
                        nextButton.setText("Next question");
                        } else {
                            questionTV.setText("You got " + numCorrect + " right and " + numWrong + " wrong.");
                            lButton.setText("");
                            cButton.setText("");
                            rButton.setText("");
                        } // end of next button 

                    } else { // answer buttons
                    if (i > -1) { 
                        if (i <= questions.length) {
                    if (getCorrect(btnClicked) == true) {
                        numCorrect += 1;
                        Toast.makeText(getApplicationContext(), "Correct!", Toast.LENGTH_SHORT).show();
                    } else {
                        numWrong += 1;
                        Toast.makeText(getApplicationContext(), "Wrong!", Toast.LENGTH_SHORT).show();
                    }
                }
            } 
        }// end of answer buttons
                }   
            };
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    greetingTV = (TextView)findViewById(R.id.greetingTV);
    questionTV = (TextView)findViewById(R.id.questionTV);
    lButton = (Button)findViewById(R.id.lButton);
    cButton = (Button)findViewById(R.id.cButton);
    rButton = (Button)findViewById(R.id.rButton);
    nextButton = (Button)findViewById(R.id.nextButton);

    //set on click listeners for buttons      


        questionTV.setText("Please click the start button to begin.");
        nextButton.setText("Start");

}
}

エラーログ:

E/AndroidRuntime(  620): FATAL EXCEPTION: main
E/AndroidRuntime(  620): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{matt.apps.quiz/matt.apps.quiz.QuizActivity}: java.lang.NullPointerException
E/AndroidRuntime(  620):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
E/AndroidRuntime(  620):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime(  620):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime(  620):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
4

2 に答える 2

1

Matthagan さん、LogCat には致命的な例外があります。赤です。ここで、あなたがやりたいことは、まず第一に、致命的な後、少なくとも最初の 4 行を常に印刷して、人々があなたが得たものを知るようにすることです。正確なスポットと日食を見たい場合は、致命的な下の、パッケージ名を含む最初の行に移動してください。この行をクリックすると、正確な場所に移動します。

これがその可能性があるものです。

1) quizButton = (ボタン)findViewById(R.id.launchQuiz); null を返すため、null ポインター例外が発生します。これは、launchQuiz がレイアウトで適切に定義されていないために発生する可能性があります。

2) レイアウト内の要素に高さと幅が指定されていない可能性があります。

于 2012-07-30T20:51:33.847 に答える
1

NullPointer があります (logcat の FATAL EXCEPTION の後の最初の行の最後にそう書かれています)。Java スタック トレースを読み取るのと同じように、スタック トレースがパッケージ名に言及している場所までトレースするだけです (現在は android.app.ActivityThread までしか表示されません)。

于 2012-07-31T02:55:24.363 に答える