0

私は立ち往生しています。私はこれを見て何時間も費やしました、そしてそれは私が間違ったことをした些細なことであるに違いないことを私は知っています。私のネイティブの「舌」はC++ですが、Androidで作業したかったのです。私はC++で構造体を使用するのが本当に好きですが、Javaでクラスを使用する回避策を使用する必要があることに気付きました。クラスに問題があるためにnullpointerを取得していることをかなりよく絞り込みました。何か案は?

267行目がマークされたコードは次のとおりです。

public class Vectors extends Activity{

    Button next;

    public class infoC{
        double value = 0, angle = 0;
        boolean radian = false; //radians/degrees
        int quad = 1; //Quadrant
    }
    public infoC[] info;

    int counter = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vectors);
        vectorsView = new VectorsView(this);
        l = (LinearLayout) findViewById(R.id.llCanvasV);
        l.addView(vectorsView);

        Initialize();       

        next.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View v) {
                error.setText("");
                if(value.getText().toString().length()==0||value.getText()==null||angle.getText().toString().length()==0||angle.getText()==null)
                    error.setText("Must enter both value and angle");
                else{
                    Log.e("Counter", Integer.toString(counter));
                    Log.e("Value", value.getText().toString());
                    storeInfo(); //121
                    counter++;
                }
            }
        });
            }
public void storeInfo(){
        Doublify(value);
        Doublify(angle);

        String temp;
        temp=value.getText().toString();

        info[counter].value = Double.parseDouble(temp);//267, Inserted temp instead of 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("");
    }
}

これがlogcatです:

04-13 18:50:45.188: ERROR/AndroidRuntime(9892): FATAL EXCEPTION: main
04-13 18:50:45.188: ERROR/AndroidRuntime(9892): java.lang.NullPointerException
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at com.prattia.webs.cheaterphysics.Vectors.storeInfo(Vectors.java:267)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at com.prattia.webs.cheaterphysics.Vectors$7.onClick(Vectors.java:121)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.view.View.performClick(View.java:2465)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.view.View$PerformClick.run(View.java:8907)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.os.Handler.handleCallback(Handler.java:587)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.os.Looper.loop(Looper.java:123)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at java.lang.reflect.Method.invoke(Method.java:521)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-13 18:50:45.188: ERROR/AndroidRuntime(9892):     at dalvik.system.NativeStart.main(Native Method)
4

5 に答える 5

1

info[] 配列を初期化したようには見えません。したがって、info[counter] は例外をスローします。

于 2012-04-14T01:57:11.603 に答える
0

変数 l を使用する前に LinearLayout として定義する

これは変数宣言で、また vectorview をビューとして宣言する必要があります

于 2012-04-14T02:04:57.240 に答える
0

info は、使用する前に初期化する必要があります。

public infoC[] info = new infoC[10];

C++でも同じように動作すると確信しています。もちろん、必要な要素の数はわかりません。10 とします。したがって、次のような動的なものを使用することをお勧めします。

...
public ArrayList<infoC> info = new ArrayList<infoC>();
...
info.add(new infoC());
info.get(counter).value = Double.parseDouble(temp);
info.get(counter).angle = Double.parseDouble(angle.getText().toString());
info.get(counter).radian = rad.isChecked();
....
于 2012-04-14T02:03:56.733 に答える
0

配列を初期化したことがないからでしょpublic infoC[] info = new infoC[size];うか?

于 2012-04-14T02:00:24.927 に答える
0

コードをデバッグし、267 行目にブレークポイントを配置して、変数の値を確認するだけです。あなたの情報がnullではありませんか?初期化が行われているのが見えません。

于 2012-04-14T02:01:14.960 に答える