Android-无法将String传递给另一个活动中的方法

时间:2017-10-05 13:31:20

标签: java android android-intent

我有两个活动,MainActivity和NearbyPlacesActivity。 我试图将NearbyPlacesActivity中的字符串传递给MainActivity中的方法show()。但是,我最后说错了:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

这是NearbyPlaces活动:

private void showNearbyPlaces(List<HashMap<String, String>> nearbyPlaceList)
{
    ArrayList<String> list_names = new ArrayList<String>();

    for(int i = 0; i < nearbyPlaceList.size(); i++)
    {

        HashMap<String, String> googlePlace = nearbyPlaceList.get(i);
        String placeName = googlePlace.get("place_name");
        list_names.add(placeName);
    }

    String alist = list_names.toString();
    String blist = alist.replace("[", "").replace("]", "");

    MainActivity main=new MainActivity();
    main.show(blist);

}

这是MainActivity中的show方法:

public void show(String blist){
    random_text.setText(blist);
}

我可以在MainActivity中设置文本,但似乎无法从NearbyPlacesActivity传递任何变量。谢谢你的帮助。

6 个答案:

答案 0 :(得分:1)

你不应该这样做在android中打开一个活动。 Android可以使用意图,因此如果您想打开主要活动并将数据传递给它。只需使用以下

Intent intent = new Intent(NearbyPlacesActivity.this,MainActivity.class);
intent.putExtra("string_key","string_value");
startActivity(intent);

如果您只想将数据传递给另一个活动中的方法。您应该持有对该活动的引用,以便您可以使用其基础方法。 引用设置在onResume上,未设置onDispose

答案 1 :(得分:0)

使用意图传递数据。不要实例化活动。

Intent intent = new Intent(this, MainActivity.class);
intent.putStringArrayListExtra("YOUR_KEY", list);
startActivity(intent);

答案 2 :(得分:0)

您必须使用Intent:

    Intent i = new Intent(NearbyPlacesActivity.this, MainActivity.class);
    i.putExtra("myblist", blist);
    startActivity(i);

在MainActivity.java中:

    if(getIntent().getExtras() != null)
    {
        String blist = getIntent().getExtras().getString("myblist");
        show(blist);
    }

答案 3 :(得分:0)

所给出的答案在这里并没有错,但我认为它们并不完整。使用验证执行此操作的最佳方法是确保从前一个Activity以及savedInstanceState获取额外内容,后者是启动Activity时收到的Bundle数据,如果需要重新创建活动,则可以将其传递回onCreate (例如,方向改变),以便您不会丢失此先前信息。如果未提供数据,则savedInstanceState为null。

  

发送数据 -

Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("name", "Jon Snow");
intent.putExtra("number", "7");
startActivity(intent);
  

接收数据 -

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myactivity);

    int no;
    String na;

    if(savedInstanceState == null){
        Bundle extras = getIntent().getExtras();

        if(extras != null){
            no = Integer.parseInt(extras.getString("number"));
            na = extras.getString("name");
        }

    }else{
        no = (int) savedInstanceState.getSerializable("number");
        na = (String) savedInstanceState.getSerializable("name");
    }

    // Other code
}

答案 4 :(得分:0)

我认为你想要的是将NearbyPlacesActivity开始为:

Intent intent = new Intent(this, NearbyPlacesActivity.class);
startActivityForResult(intent, 1234);

然后在您的MainActivity中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1234) {
        if (data.hasExtra("list"){
            String list = data.getStringExtra("list");
            show(list);
        }
    }
}

并在您的NearByPlacesActivity.class

private void showNearbyPlaces(List<HashMap<String, String>> nearbyPlaceList)
{
    ArrayList<String> list_names = new ArrayList<String>();

    for(int i = 0; i < nearbyPlaceList.size(); i++)
    {

        HashMap<String, String> googlePlace = nearbyPlaceList.get(i);
        String placeName = googlePlace.get("place_name");
        list_names.add(placeName);
    }

    String alist = list_names.toString();
    String blist = alist.replace("[", "").replace("]", "");

    Intent intent = new Intent();
    intent.putExtra("list", blist);
    setResult(RESULT_OK, intent);
    this.finish();

}

答案 5 :(得分:0)

On First Activity

Intent intent = new Intent(NearbyPlacesActivity.this,MainActivity.class);
intent.putExtra("string_key","string_value");
startActivity(intent);

关于第二项活动:

 Intent intent=getIntent();
 String strValue=intent.getStringExtra("string_key");