代码之家  ›  专栏  ›  技术社区  ›  Spotz

Android无法将字符串传递给另一个活动中的方法

  •  0
  • Spotz  · 技术社区  · 7 年前

    我有两个活动,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
    

    以下是NearbyPlacesActivity:

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

    6 回复  |  直到 7 年前
        1
  •  1
  •   Daniel Raouf    7 年前

    你不应该这样做来在android中打开一个活动。 安卓系统与Intent一起工作,所以如果你想打开主要活动并将数据传递给它。只需使用以下内容

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

    如果您只想将数据传递给另一个活动内的方法。您应该保留对该活动的引用,以便可以使用其底层方法。

        2
  •  0
  •   user320676    7 年前

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

    Intent intent = new Intent(this, MainActivity.class);
    intent.putStringArrayListExtra("YOUR_KEY", list);
    startActivity(intent);
    
        3
  •  0
  •   Cagri Yalcin    7 年前

    您必须使用意图:

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

        if(getIntent().getExtras() != null)
        {
            String blist = getIntent().getExtras().getString("myblist");
            show(blist);
        }
    
        4
  •  0
  •   Sanved    7 年前

    这里给出的答案没有错,但在我看来是不完整的。进行验证的最佳方法是确保从之前的活动以及savedInstanceState中提取额外的数据,savedInstanceState是启动活动时收到的捆绑数据,如果需要重新创建活动(例如方向更改),则可以将其传递回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
    }
    
        5
  •  0
  •   NipunPerfect Basil Battikhi    7 年前

    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");
    
        6
  •  0
  •   Sergio Bañares    7 年前

    我认为你想要的是开始你的NearByPlaces活动:

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

    @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。班

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