使用数组的 NullPointerException
Posted
技术标签:
【中文标题】使用数组的 NullPointerException【英文标题】:NullPointerException using arrays 【发布时间】:2012-02-24 08:12:54 【问题描述】:我有一个活动:
...
double []mylab=new double [100];
public void compute()
...
double mytime=Double.parseDouble(timing.getText().toString().trim());
//fill array
for (int i=0;i<=mytime;i++)
mylab[i]=Math.exp(i);
//Arrays.fill(mylab,Math.exp(i));
...
i.putExtra("mylab",mylab);
startActivity(i);
在折线图活动中:
...
private double [] mylab =new double [100];
public double [] getmylab() return this.mylab;
public void setmylab(double [] mylab) this.mylab=mylab;
...
public void onCreate(Bundle savedInstanceState)
Bundle extras=getIntent().getExtras();
double [] mylab=extras.getDoubleArray("mylab");
setmylab(mylab);
..
public Intent getIntent(Context context)
double []mylab=getmylab();
ArrayList<Double> x =new ArrayList<Double>();
ArrayList<Double> y =new ArrayList<Double>();
//fill x,y values
for (int i=0;i<=20;i++)
x.add(mytime/i);
for (int i=0;i<=20;i++)
y.add(mylab[i]);
...
我想错误在于我填充数组的位置?
-------------Logcat------------------------------
致命异常:主 E/androidRuntime(461):
java.lang.RuntimeException: 无法启动活动组件信息
java.lang.NullPointerException E/AndroidRuntime(461): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(461): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(461): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(461): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(461): 在 android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(461): 在 android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(461): 在 android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(461): 在 java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(461): 在 java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(461): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(461): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(461): 在 dalvik.system.NativeStart.main(Native 方法)E/AndroidRuntime(461):原因:
java.lang.NullPointerException E/AndroidRuntime(461): 在 com...LineGraph.getIntent(LineGraph.java:109) E/AndroidRuntime(461):
在 com..LineGraph.onCreate(LineGraph.java:80) E/AndroidRuntime(461):
在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(461): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
【问题讨论】:
你知道哪一行抛出了 NullPointerException 吗? 如果不告诉我们错误发生在哪里,就无法为您提供帮助。 你在哪一行得到错误?另外:我对您实例化数组的方式持谨慎态度。除非你能保证 mytime 总是小于 100,否则我会让数组等于 mytime 的大小。 我更新了。我把 Logcat.Mytime 永远是 linegraph.java 中的第 109 行是什么 【参考方案1】:如果 myTime > myLab 数组的大小,您将收到 ArrayIndexOutOfBounds 错误
double mytime=Double.parseDouble(timing.getText().toString().trim());
//fill array
for (int i=0;i<=mytime;i++)
mylab[i]=Math.exp(i);
//Arrays.fill(mylab,Math.exp(i));
【讨论】:
:mytime 永远是 ……也许吧。没有足够的信息来找出原因 - 告诉我们错误发生在哪一行。我只能猜测 getmylab() 返回 null。【参考方案2】:发生错误是因为您正在访问一个不存在的数组索引。 很可能是在填充数组时。
// make sure `mytime` is less or equal than 100
for (int i=0;i<=mytime;i++)
mylab[i]=Math.exp(i);
//Arrays.fill(mylab,Math.exp(i));
【讨论】:
【参考方案3】:你在打电话吗
Intent getIntent()
在新创建的类实例上?因为这可能对mylab
即null
进行操作,因为该字段在创建每个实例时被初始化为null。
【讨论】:
【参考方案4】:我的错!
我还有另一个活动在中间!我完全忘记了!我看不到它!
对不起!
感谢大家的帮助,尤其是 L7ColWinters :)。
【讨论】:
以上是关于使用数组的 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
使用 ViewPager 的 Layout Inflater 抛出 NullPointerException
如何使用 Mockito 在单元测试中调用 AppCompatActivity onCreate