我有两个活动,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传递任何变量。谢谢你的帮助。
答案 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)
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");