使用数组的 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()

在新创建的类实例上?因为这可能对mylabnull 进行操作,因为该字段在创建每个实例时被初始化为null。

【讨论】:

【参考方案4】:

我的错!

我还有另一个活动在中间!我完全忘记了!我看不到它!

对不起!

感谢大家的帮助,尤其是 L7ColWinters :)。

【讨论】:

以上是关于使用数组的 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG 视频录像机问题

使用 ViewPager 的 Layout Inflater 抛出 NullPointerException

如何使用 Mockito 在单元测试中调用 AppCompatActivity onCreate

Steque 和 API 实现

AllProductsActivity.java 中的 Logcat 错误

设计模式-工厂模式-记运行ShapeFactoryDemo排错