开发者

Sending Bundle/data to another class or screen

What am I doing wrong?

I've looked at other questions and thought I was doing the exact same things, but since its not working for me, obviously I'm doing something wrong!

I have my MainActivity.class that gets JSON data (coordinates) from a URL. This part works. I then want to load up a MapView, called OverlayActivity.class, and send this data to this map so I can populate it with overlays etc. I pull varying numbers of points down and dynamically create buttons. Depending on what button is clicked, it sends different data. Here's the code for this loop:

final LinearLayout layout = (LinearLayout) findViewById(R.id.menuLayout);
layout.removeAllViewsInLayout();
String itemName="";
int itemID=0;
for (int i = 0; i < dataSetsMap.size(); i++) {
    itemID=i+1;
    itemName=dataSetsMap.get(itemID);
    Button b = new Button(this);
    b.setText(itemName);
    layout.addView(b);

    // These need to be final to use them inside OnClickListener()
    final String tempName=itemName;
    final int tempID=itemID;

        b.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                Intent i = new Intent();
                Bundle b = new Bundle();

                i.setClass(myContext, OverlayActivity.class);
                Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID);
            b.putInt(tempName开发者_如何学Go, tempID);
                i.putExtras(b);
                startActivity(i);  
              }
          });
}   // End for()

So obviously I want to read this data on the other side, assuming I'm sending it correctly. So, to read it, I've been trying a few different things:

        //Method 1:
    String test1=intent.getStringExtra("name");
        String test2=intent.getStringExtra("id");

    //Method 2:
        String meh=getIntent().getExtras().getString("id").toString();
        String bleh=getIntent().getExtras().getString("name");

        //Method 3:
        String value=savedInstanceState.getString("name");
        String id=savedInstanceState.getString("id").toString();

        //Method 4:
        Bundle bundle = getIntent().getExtras();
        String id=bundle.getString("id"); 
        String value = getIntent().getExtras().getString("name");

i get a NullPointerException when trying to use any of these methods. Its my first time using these types of methods so can someone point me in the right direction or tell me where I've gone wrong?


Firstly, using Bundle b when you've already got Button b isn't really a good idea if for no other reason than it gets confusing, ;)

Secondly, you don't need to use a Bundle to pass a string and an int. Just add them to your Intent directly...

Intent i = new Intent(myContext, OverlayActivity.class);
i.putExtra("name", tempName);
i.putExtra("id", tempID);
startActivity(i);  

To retrieve them in your OverlayActivity use...

Intent i = getIntent();
String name = i.getStringExtra("name");
int id = i.getIntExtra("id", -1); // -1 in this case is a default value to return if id doesn't exist


Why not just do this:

Intent i = new Intent();
                i.setClass(myContext, OverlayActivity.class);
                Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID);
            i.putExtra("name", tempName);
            i.putExtra("id", tempID);
                startActivity(i);  

and then you can fetch them with:

  String name = getIntent().getStringExtra("name", "");
  int id = getIntent().getIntExtra("id", 0);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜