0

AVDで起動すると、アプリケーションが機能しなくなります。「残念ながら、{アプリ名}が機能しなくなりました。」と表示されます。

実行中のログは次のとおりです。

01-07 10:52:06.162: E/AndroidRuntime(771): FATAL EXCEPTION: main
01-07 10:52:06.162: E/AndroidRuntime(771): java.lang.IllegalStateException: Could not     execute method of the activity
01-07 10:52:06.162: E/AndroidRuntime(771):  at  android.view.View$1.onClick(View.java:3597)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.view.View.performClick(View.java:4202)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.view.View$PerformClick.run(View.java:17340)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.os.Handler.handleCallback(Handler.java:725)
01-07 10:52:06.162: E/AndroidRuntime(771):  at  android.os.Handler.dispatchMessage(Handler.java:92)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.os.Looper.loop(Looper.java:137)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.app.ActivityThread.main(ActivityThread.java:5039)
01-07 10:52:06.162: E/AndroidRuntime(771):  at java.lang.reflect.Method.invokeNative(Native Method)
01-07 10:52:06.162: E/AndroidRuntime(771):  at java.lang.reflect.Method.invoke(Method.java:511)
01-07 10:52:06.162: E/AndroidRuntime(771):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-07 10:52:06.162: E/AndroidRuntime(771):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-07 10:52:06.162: E/AndroidRuntime(771):  at dalvik.system.NativeStart.main(Native Method)
01-07 10:52:06.162: E/AndroidRuntime(771): Caused by: java.lang.reflect.InvocationTargetException
01-07 10:52:06.162: E/AndroidRuntime(771):  at java.lang.reflect.Method.invokeNative(Native Method)
01-07 10:52:06.162: E/AndroidRuntime(771):  at java.lang.reflect.Method.invoke(Method.java:511)
01-07 10:52:06.162: E/AndroidRuntime(771):  at android.view.View$1.onClick(View.java:3592)
01-07 10:52:06.162: E/AndroidRuntime(771):  ... 11 more
01-07 10:52:06.162: E/AndroidRuntime(771): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
01-07 10:52:06.162: E/AndroidRuntime(771):  at com.ultimanaire.MainActivity.playGame(MainActivity.java:38)
01-07 10:52:06.162: E/AndroidRuntime(771):  ... 14 more

これは、最初に質問を投稿したときに追加するのを忘れたMainActivity.javaのコードです。18行目と言う人もいます。

if (sub.isChecked()) {

MainActivity.javaのコードがすべての場合は次のとおりです。

package com.ultimanaire;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;


public class MainActivity extends Activity {

    String[] subjects = {};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void playGame(View view) {
        int r = 0;
       CheckBox t = (CheckBox)findViewById(R.id.subject_math);
        CheckBox y = (CheckBox)findViewById(R.id.subject_science);
        CheckBox u = (CheckBox)findViewById(R.id.subject_history);
        CheckBox i = (CheckBox)findViewById(R.id.subject_foreign_language);
        CheckBox[] stored_subjects =  {t, y, u, i};
        for(CheckBox sub : stored_subjects) {

            if (sub.isChecked()) {
                 subjects[r] = (String) sub.getText();
            r = r +1;
            }

        }

        Intent intent = new Intent(this, GameActivity.class);
        intent.putExtra("SUBJECT", subjects);
        startActivity(intent);
    }

}

それで、なぜnullpointerが発生して修正したのかを理解し、次に別のnullpointerを持ってきて、なんとか修正しましたが、今では理解できない別のnullpointerが発生します。コードを編集して、現在の修正方法と、nullpointerを与える行を修正しました。ログ猫も更新されます。デバイス上の同じメッセージは、「残念ながらアプリ名は機能しなくなりましたが、アプリを開いたときではなく、今は開いていますが、playGameメソッドをonClickとして使用する再生ボタンをクロックすると表示されます。

4

2 に答える 2

4
17:56:19.114: E/AndroidRuntime(901): Caused by: java.lang.NullPointerException 01-04 17:56:19.114: E/AndroidRuntime(901): at com.ultimanaire.MainActivity.(MainActivity.java:18) 01-04 17:56:19.114: 

スタックトレースに基づくと、NullPointerExceptionの 18 行目で発生しMainActivity.javaます。

問題のコードは投稿されていないため、原因を予測することはできませんNullpointerException

于 2013-01-04T18:49:57.883 に答える
0

配列インデックスを次のように初期化しているため、範囲外の例外が発生しています

String[] subjects = {};

したがって、その長さは0です。そして、次を使用してアクセスしようとしています

subjects[r] = (String) sub.getText();

これは例外をスローします。2 つのオプション:

1>それを次のように初期化します

String[] subjects = null;

それから加えて

subjects = new String[stored_subjects.length];

これにより、動的 String[] が提供されます。サイズは、チェックボックス配列の長さによって異なります。

2>それを次のように初期化します

String[] subjects = new String[4];

静的配列のみになる場合。チェックボックス配列には、コードに従って4つの要素が含まれるためです。それが役に立てば幸い。

于 2013-01-07T11:05:36.290 に答える