2012-04-14 6 views
0

Ich stecke fest. Ich habe Stunden damit verbracht, dies zu betrachten, und ich weiß, dass es etwas Triviales sein muss, das ich falsch gemacht habe. Meine Muttersprache ist C++, aber ich wollte mit Android arbeiten. Ich mag es wirklich, Strukturen in C++ zu verwenden, aber entdeckte, dass ich eine Arbeit mit einer Klasse in Java verwenden musste. Ich habe ziemlich gut eingegrenzt, dass ich einen Nullpointer bekomme, weil etwas mit meiner Klasse nicht stimmt. Irgendwelche Ideen? HierWarum bekomme ich eine Nullpointerexzeption, wahrscheinlich einen Klassenfehler (Android)?

ist der Code mit der Linie 267 markiert:

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(""); 
    } 
} 

Hier ist die 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) 
+0

Was ist Doublify in Ihrem Code –

+0

Nun, ziemlich viele von euch hatten Recht ... Es ist mein Mangel an strukturierten Java-Training. Ich lief eine for (Schleife, um Info [i] als neue infoC() zu initialisieren. – rphello101

+0

ist jetzt Ihr Problem –

Antwort

1

Es sieht nicht so aus, wie Sie jemals Ihre info [] Array initialisiert. So löst info [counter] eine Ausnahme aus.

+0

Es sei denn, dass Informationen in seiner Initialize-Methode initialisiert werden, aber das ist definitiv das Problem gegeben, was gepostet wird. – meanbunny

0

Könnte es sein, weil Sie Ihr Array nie initialisieren public infoC[] info = new infoC[size];?

0

Sie sollten nur Ihren Code debuggen, setzen Sie einen Haltepunkt in Zeile 267 und sehen Sie, was die Werte Ihrer Variablen sind. Sind Sie sicher, dass Ihre Informationen nicht null sind? Ich kann keine Initialisierung darauf sehen.

0

Informationen müssen vor der Verwendung initialisiert werden.

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

Ich bin mir ziemlich sicher, so funktioniert es auch in C++. Natürlich weiß ich nicht, wie viele Elemente, die Sie brauchen, habe ich 10. So möchten Sie vielleicht etwas dynamisch wie verwenden:

... 
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(); 
.... 
0

definieren Variable l als Linearlayout, bevor es

diese über die Verwendung Ihre Variablendeklarationen, sollten Sie auch Ihre Vektoransicht als Ansicht

Verwandte Themen