У меня есть массив плавающий 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");
и я не знаю почему. Я попытался связаться прежде, чем назвать намерение и т.д., но у меня не было удачи в фиксации. Кто-либо знает почему?
Я также включал часть ошибки, упаковывают любого из Вас, интересно.
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
Спасибо!
Итак, это предполагает, что this.getIntent (). GetExtras ()
вернул null
. Обратите внимание, что в makeview
вы ничего не сделали после создания пакета. Вам нужно сделать:
myIntent.putExtras(b);
, возможно, в конце? (Я не разработчик Android, поэтому я не знаю API, но это кажется вероятным ...)
РЕДАКТИРОВАТЬ: Как уже отмечали другие, вы потенциально должны поместить вызов startActivity
после все настраивал по намерениям.
Если вы получите исключение NullPointerException в строке
float original[] = b.getFloatArray("tweets");
, то единственным вариантом будет то, что b будет равно нулю. Может ли this.getIntent (). GetExtras () в некоторых случаях возвращать значение null? вы должны это проверить.
В вашем методе 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
}
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
Bundle b = new Bundle();
b.putFloatArray("tweets", camObjCoord);
. ---->> поэтому он ничего не передаст
. поэтому на стороне получателя
Bundle b = this.getIntent().getExtras();
float original[] = b.getFloatArray("tweets");
---->> этот вышеприведенный код получает значение "null".
Поэтому попробуйте сначала создать пакет, а затем начать свою деятельность.
Попробуйте это:
public void makeview() {
Intent myIntent = new Intent(this, GLCamTest.class);
Bundle b = new Bundle();
b.putFloatArray("tweets", camObjCoord);
this.startActivity(myIntent);
}