Исключение нулевого указателя при использовании Bundle для передачи данных - PullRequest
5 голосов
/ 14 июля 2010

У меня есть массив с плавающей точкой 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

Спасибо!

Ответы [ 7 ]

4 голосов
/ 14 июля 2010

Хорошо, это говорит о том, что this.getIntent().getExtras() вернул null.Обратите внимание, что в makeview вы ничего не сделали после создания пакета.Вам нужно сделать:

myIntent.putExtras(b);

в конце, возможно?(Я не разработчик Android, поэтому я не знаю API, но это звучит правдоподобно ...)

РЕДАКТИРОВАТЬ: Как уже отмечали другие, вы должны потенциально сделать startActivity вызов после установив все по своему усмотрению.

3 голосов
/ 14 июля 2010

В вашем методе 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
}
1 голос
/ 14 июля 2010
   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);

}
0 голосов
/ 10 апреля 2018

Попробуйте, у меня это работает

 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

0 голосов
/ 31 марта 2015

Ну, у меня была похожая проблема.в моем случае исключение нулевой точки происходило, когда я проверял, равен ли мой bundle.getString () нулю.

вот как в моем случае я решил это:1006 *

Intent intent = getIntent();        
    if(intent.hasExtra("nomeUsuario")){
        bd = getIntent().getExtras();
        if(!bd.getString("nomeUsuario").equals(null)){
            nomeUsuario = bd.getString("nomeUsuario");
        }
    }
0 голосов
/ 15 июня 2013

this.getIntent (). GetExtras () вернул ноль.Убедитесь, что в makeview вы ничего не сделали после создания пакета.Вам нужно:

myIntent.putExtras (b);

в конце

0 голосов
/ 14 июля 2010

Если вы получите NullPointerException в строке

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

тогда единственный вариант - это то, что b равно нулю. Может ли this.getIntent (). GetExtras () возвращать значение NULL в некоторых случаях? Вы должны проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...