Отправка пакета / данных в другой класс или экран - PullRequest
1 голос
/ 28 мая 2011

Что я делаю не так?

Я смотрел на другие вопросы и думал, что делаю точно такие же вещи, но, поскольку это не работает для меня, очевидно, я делаю что-то не так!

У меня есть MainActivity.class, который получает данные JSON (координаты) из URL.Эта часть работает.Затем я хочу загрузить MapView, который называется OverlayActivity.class, и отправить эти данные на эту карту, чтобы я мог заполнить ее наложениями и т. Д. Я опускаю различное количество точек вниз и динамически создаю кнопки.В зависимости от того, какая кнопка нажата, она отправляет разные данные.Вот код для этого цикла:

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, tempID);
                i.putExtras(b);
                startActivity(i);  
              }
          });
}   // End for()

Итак, очевидно, я хочу прочитать эти данные на другой стороне, предполагая, что я отправляю их правильно.Итак, чтобы прочитать его, я пробовал несколько разных вещей:

        //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");

я получаю NullPointerException при попытке использовать любой из этих методов.Это мой первый раз, когда я использую такие методы, поэтому кто-то может указать мне правильное направление или сказать, где я ошибся?

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Почему бы просто не сделать это:

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);  

, а затем вы можете получить их с помощью:

  String name = getIntent().getStringExtra("name", "");
  int id = getIntent().getIntExtra("id", 0);
1 голос
/ 28 мая 2011

Во-первых, использование Bundle b, когда у вас уже есть Button b, не очень хорошая идея, если по какой-либо другой причине, кроме путаницы,;)

Во-вторых, вам не нужноиспользовать Bundle для передачи строки и int.Просто добавьте их в свой Intent напрямую ...

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

Чтобы получить их в вашем OverlayActivity, используйте ...

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
...