为什么我会得到一个nullpointerexception,可能是一个类错误(Android)?
我卡住了。我花了好几个小时研究这个问题,我知道这一定是我做错了什么小事。我的母语是“C++”,但我想用Android工作。我很喜欢C++中的Struts,但是发现我必须在java中使用一个类。我已经很好地缩小了我得到一个空指针的范围,因为我的类出了问题。有什么想法吗 以下是标有第267行的代码:为什么我会得到一个nullpointerexception,可能是一个类错误(Android)?,android,nullpointerexception,Android,Nullpointerexception,我卡住了。我花了好几个小时研究这个问题,我知道这一定是我做错了什么小事。我的母语是“C++”,但我想用Android工作。我很喜欢C++中的Struts,但是发现我必须在java中使用一个类。我已经很好地缩小了我得到一个空指针的范围,因为我的类出了问题。有什么想法吗 以下是标有第267行的代码: public class Vectors extends Activity{ Button next; public class infoC{ double valu
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("");
}
}
以下是日志:
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)
看起来您从未初始化过info[]数组。因此,info[counter]抛出一个异常 可能是因为您从未初始化过数组
public infoC[]info=new infoC[size]代码>?您应该调试代码,在第267行放置一个断点,然后查看变量的值。你确定你的信息不是空的吗?我看不到正在对其进行任何初始化。信息必须在使用前进行初始化
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();
....
。。。
public ArrayList info=new ArrayList();
...
添加(新的infoC());
info.get(counter.value=Double.parseDouble(temp);
info.get(counter.angle=Double.parseDouble(angle.getText().toString());
info.get(counter.radian=rad.isChecked();
....
在使用变量l之前,将其定义为线性布局
在你的变量声明中,你也应该声明你的vectorview为view,除非信息是在他的Initialize方法中初始化的,但是考虑到发布的内容,这绝对是个问题。你的代码中的双重性是什么?很多人都是对的。。。这是因为我缺乏结构化的Java培训。我运行了一个for(循环,将info[I]初始化为new infoC()。