2010-07-14 86 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"); 
     } 
    }