使用Bundle传递数据时出现空指针异常

时间:2010-07-14 10:40:44

标签: java android nullpointerexception

我有一个浮点数组camObjCoord声明为..

public static float camObjCoord[] = new float[8000];

然后我在一个类中填充它的索引,类似于以下内容..

camObjCoord[1] = 2.5;

然后我打电话给makeview()

       public void makeview() {
    Intent myIntent = new Intent(this, GLCamTest.class);
    this.startActivity(myIntent);
    Bundle b = new Bundle();
    b.putFloatArray("tweets", camObjCoord);
}

然后在新课程中它正在......

               public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle b = this.getIntent().getExtras();
    float original[] = b.getFloatArray("tweets");
    camObjCoord = original;
    counter++;
}   

但是......我在float original[] = b.getFloatArray("tweets");获得了Null指针异常,我不知道为什么。我在调用意图等之前尝试过捆绑,但是我没有运气。谁知道为什么?

我也包含了一些你感兴趣的错误。

            07-14 11:14:35.592: ERROR/AndroidRuntime(7886): Caused by:  java.lang.NullPointerException
            07-14 11:14:35.592: ERROR/AndroidRuntime(7886):     at  org.digital.com.GLCamTest.onCreate(GLCamTest.java:41)
            07-14 11:14:35.592: ERROR/AndroidRuntime(7886):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
            07-14 11:14:35.592: ERROR/AndroidRuntime(7886):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
            07-14 11:14:35.592: ERROR/AndroidRuntime(7886):     ... 11 more

谢谢!

7 个答案:

答案 0 :(得分:4)

好的,这表明this.getIntent().getExtras()已返回null。请注意,在makeview中,您在创建捆绑包后没有完成任何内容。你需要这样做:

myIntent.putExtras(b);
也许在最后? (我不是Android开发人员所以我不知道API,但听起来很可能......)

编辑:正如其他人所指出的那样,你应该在之后设置startActivity调用来设置意图上的所有内容。

答案 1 :(得分:3)

您的makeview方法存在逻辑缺陷,您需要在意图启动之前添加额外内容。此外,强烈建议使用常量(GLCamTest.TWEETS)作为密钥。

public void makeview() {
    Intent myIntent = new Intent(this, GLCamTest.class);
    myIntent.putExtra(GLCamTest.TWEETS, camObjCoord);//assuming camObjCoord is float[]
    this.startActivity(myIntent);
}

另一方面

Bundle b = this.getIntent().getExtras();
float original[];
if (b!=null) {
    original = b.getFloatArray(GLCamTest.TWEETS);
}
if (original!=null) {
   //do something with original
}

答案 2 :(得分:1)

   public void makeview() {
Intent myIntent = new Intent(this, GLCamTest.class);
this.startActivity(myIntent);
Bundle b = new Bundle();
b.putFloatArray("tweets", camObjCoord);

}

我认为您犯的错误是您已启动活动this.startActivity(myIntent);,之后您传递了捆绑值

 Bundle b = new Bundle();
    b.putFloatArray("tweets", camObjCoord);

。的 ---->>> so it will pass nothing 即可。所以在接收方那边

Bundle b = this.getIntent().getExtras();
    float original[] = b.getFloatArray("tweets");

<强> ---->>> this above code receive "null" value.

因此,首先尝试捆绑,然后开始您的活动。

试试这个:

  public void makeview() {
    Intent myIntent = new Intent(this, GLCamTest.class);

    Bundle b = new Bundle();
    b.putFloatArray("tweets", camObjCoord);

this.startActivity(myIntent);

}

答案 3 :(得分:0)

如果在

行获得NullPointerException
float original[] = b.getFloatArray("tweets"); 

那么唯一的选择是b为null。在某些情况下,this.getIntent()。getExtras()是否可以返回null?你应该检查一下。

答案 4 :(得分:0)

this.getIntent()。getExtras()返回null。确保在makeview中创建捆绑包后没有做任何事情。你需要:

myIntent.putExtras(B);

最后

答案 5 :(得分:0)

好吧,我有类似的问题。在我的情况下,当我检查我的 bundle.getString()是否等于null时,发生了零点异常。

以下是我的案例解决方法:

Intent intent = getIntent();        
    if(intent.hasExtra("nomeUsuario")){
        bd = getIntent().getExtras();
        if(!bd.getString("nomeUsuario").equals(null)){
            nomeUsuario = bd.getString("nomeUsuario");
        }
    }

答案 6 :(得分:0)

试试这个,它对我有用

 Intent i = getIntent();

   if (i == null) 
       Log.d(" DEBUG AGILANBU ", "Here the intent value was null");           
   else
       Log.d(" DEBUG ", "Intent OK");

   String strGetVal  = i.getStringExtra("PackageName"); // Here we set an exception points to this line
   Log.d("*** DEBUG", rec + " " + strGetVal);

Happie Coding