2010-07-14 95 views
5

我得声明为int数组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");一个空指针异常,我不知道为什么。在尝试打电话之前,我尝试过打包等,但我没有修好。有人知道为什么

我还包括了一些错误incase任何你有兴趣。

  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 

谢谢!

+0

和行是第41? – 2010-07-14 10:47:17

+0

@Jon Skeet'float original [] = b.getFloatArray(“tweets”);' – Skizit 2010-07-14 10:47:54

+1

好的,这表明了一个答案。请在将来的问题中提供所有相关信息。 – 2010-07-14 10:55:23

回答

4

好的,所以暗示this.getIntent().getExtras()已经返回null。请注意,在makeview中,您没有完成任何创建捆绑包后。你需要做的:

myIntent.putExtras(b); 

最后也许? (我不是一个Android开发者,所以我不知道的API,但是这听起来可能...)

编辑:正如其他人所指出的那样,你应该有可能把startActivity呼叫后设置的一切意图。

0

如果你在该行

float original[] = b.getFloatArray("tweets"); 

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

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

有一个逻辑缺陷在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 
} 
0

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

myIntent.putExtras(b);

最后

0

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

这里是如何在我的情况我解决了它:

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