Null pointer exception when using Bundle to pass data

不问归期 提交于 2021-01-27 05:41:47

问题


I've got a float array camObjCoord declared as..

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

I'm then filling it's indexes in a class that does something like the following..

camObjCoord[1] = 2.5;

I'm then calling makeview()

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

and then in the new class it's doing...

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

But... I'm getting a Null pointer Exception at float original[] = b.getFloatArray("tweets"); and I don't know why. I've tried bundling before calling the intent etc. but I've had no luck at a fix. Anyone know why?

I've also included some of the error incase any of you are interested.

            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

Thanks!


回答1:


Okay, so that suggests that this.getIntent().getExtras() has returned null. Note that in makeview you haven't done anything after creating the bundle. Do you need to do:

myIntent.putExtras(b);

at the end perhaps? (I'm not an Android developer so I don't know the API, but that sounds likely...)

EDIT: As others have pointed out, you should potentially put the startActivity call after setting everything on the intent.




回答2:


There is a logic flaw in your makeview method, you need to add the extras to the intent before it's started. Also it's highly recommended to use a constant (GLCamTest.TWEETS) for the key.

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

And on the other side

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



回答3:


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

}

I think error you made is that you have started the activity this.startActivity(myIntent); and after that you are passing the bundle value

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

. ---->>> so it will pass nothing. so on receiver side

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

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

So try to bundle first and then start your activity.

Try this:

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

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

this.startActivity(myIntent);

}



回答4:


If you get a NullPointerException at the line

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

then the only option is that b is null. Can this.getIntent().getExtras() return null in some cases? you should check it.




回答5:


this.getIntent().getExtras() has returned null. Make sure that in makeview you haven't done anything after creating the bundle. Do you need:

myIntent.putExtras(b);

at the end




回答6:


Well, I had similiar problem. in my case the null point exception was happen when I checked if my bundle.getString() was equall to null.

here is how IN MY CASE I solved it:

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



回答7:


Try this , it works for me

 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



来源:https://stackoverflow.com/questions/3245331/null-pointer-exception-when-using-bundle-to-pass-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!