0

これとほぼ同じコードが別のプログラムで機能したため、なぜここでnullpointerexceptionが発生するのかまったくわかりません。簡単なことだといいのですが。

これがlogcatです:

04-09 08:18:57.903: ERROR/AndroidRuntime(14378): java.lang.NullPointerException
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at com.prattia.webs.cheaterphysics.Vectors.storeInfo(Vectors.java:216)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at com.prattia.webs.cheaterphysics.Vectors$2.onClick(Vectors.java:67)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at android.view.View.performClick(View.java:2465)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at android.view.View$PerformClick.run(View.java:8907)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at android.os.Handler.handleCallback(Handler.java:587)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-09 08:18:57.903: ERROR/AndroidRuntime(14378):     at android.os.Looper.loop(Looper.java:123)

Counterは、intが0で初期化され、vを格納するために次にクリックされた回数を追跡します。これは、67行目と216行目がマークされたコードの一部です。

next.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View v) {
                error.setText("");
                if(value.toString().length()==0||angle.toString().length()==0)
                    error.setText("Must enter both value and angle");
                else{
                    storeInfo(); //67
                    counter++;
                }
            }
        });

public void storeInfo(){
        Doublify(value);
        Doublify(angle);

    //216   info[counter].value = Double.parseDouble(value.getText().toString());
        info[counter].angle = Double.parseDouble(angle.getText().toString());
        info[counter].radian = rad.isChecked();
        if(q1.isChecked())
            info[counter].quad=1;
        if(q2.isChecked())
            info[counter].quad=2;
        if(q3.isChecked())
            info[counter].quad=3;
        if(q4.isChecked())
            info[counter].quad=4;
        angle.setText("");
        value.setText("");
    }
4

2 に答える 2

0

64行toString目では、'value'オブジェクトを使用しています。これは、TextViewのデフォルトの実装を返す可能性が高く、toString()長さが0ではない可能性があります。

value.toString()

しかし、216行目では、正しい方法を使用してテキスト値を取得しています。テストを行っていないため、nullになる可能性があります。

value.getText().toString()

64行目を次のように変更します。

if(value.getText() == null || value.getText().toString().length() == 0)

(および値についても同様angleです)

于 2012-04-10T01:14:06.000 に答える
0

JScoobyCedの回答がnullポインターでない場合は、配列である可能性があります。

info[counter].value // might be null because array's start at 0 not 1

多分あなたが望む:

info[counter - 1].value
于 2012-04-10T01:20:26.363 に答える