我正在制作的应用程序需要将数据从活动2传输到上一个活动1。所以我正在使用startActivityForResult()然后使用onActivityResult();
一直运行到昨天,当我按下按钮从活动1转到活动2时,我的应用程序滞后并崩溃。
如果出于某种原因我在activity1中将onActivityResult()注释掉,它将再次起作用。但是,那么数据将不会传递,我需要将来自activity2的listview的数据传输到activity1中的textView。
我不相信我实际上已经更改了代码,所以我为为什么发生这种情况感到困惑。如果有人可以帮助我检查我的代码,那就太好了。谢谢:)
崩溃日志:
E / Android运行时:致命异常:主要 流程:com.example.jiowhere,PID:5667 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.String.toLowerCase(java.util.Locale)' 在com.example.jiowhere.ListViewAdaptor.filter(ListViewAdaptor.java:119) 在com.example.jiowhere.ListViewAdaptor.tagFilter(ListViewAdaptor.java:176) 在com.example.jiowhere.RecommendationListActivity $ 2.onTextChanged(RecommendationListActivity.java:96) 在android.widget.TextView.sendOnTextChanged(TextView.java:9754) 在android.widget.TextView.setText(TextView.java:5733) 在android.widget.TextView.setText(TextView.java:5571) 在android.widget.TextView.setText(TextView.java:5528) 在com.example.jiowhere.RecommendationListActivity.onActivityResult(RecommendationListActivity.java:145) 在com.example.jiowhere.RecommendationListActivity.onClick(RecommendationListActivity.java:161) 在android.view.View.performClick(View.java:6597) 在android.view.View.performClickInternal(View.java:6574) 在android.view.View.access $ 3100(View.java:778) 在android.view.View $ PerformClick.run(View.java:25885) 在android.os.Handler.handleCallback(Handler.java:873) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:6669) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
onCreate()方法之外的活动1
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check that it is the SecondActivity with an OK result
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
// Get String data from Intent
String returnString = data.getStringExtra("keyName");
// Set text view with string
TextView filterView = (TextView) findViewById(R.id.filterByTags);
filterView.setText(returnString);
}
}
}
@Override
public void onClick(View v) {
if (v == tagButton) {
Intent intent = new Intent(this, TagSystemActivity.class);
startActivityForResult(intent, 1);
//crashes app
onActivityResult(1, RESULT_OK, intent);
}
}
OnCreate()方法中的Activity2
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String selectedFromList = (String) (listView.getItemAtPosition(position));
testing.setText(selectedFromList);
Intent intent = new Intent();
intent.putExtra("keyName", selectedFromList);
setResult(RESULT_OK, intent);
finish();
}});
答案 0 :(得分:1)
删除下面的行
onActivityResult(1, RESULT_OK, intent);
从这里
@Override
public void onClick(View v) {
if (v == tagButton) {
Intent intent = new Intent(this, TagSystemActivity.class);
startActivityForResult(intent, 1);
//crashes app
onActivityResult(1, RESULT_OK, intent);
}
}
此行在活动2向活动1发送结果之前,使用空对象调用活动结果。您无需手动调用该方法。onActivityResult
方法一旦从某个地方(在您的情况下,从activity2)获得结果,就会自动调用。
答案 1 :(得分:0)
String returnString = data.getStringExtra(“ keyName” );
在这一行中,您需要用密钥替换“ keyName” 。 我认为该对象在keyName上为空引用。
答案 2 :(得分:0)
您不应该手动调用onActivityResult(...)。
startActivityForResult(intent, 1);
//crashes app
onActivityResult(1, RESULT_OK, intent);
将此调用移至onActivityResult(...);来自onClick()。
当您发布其他活动的结果时,会自动调用onActivityResult方法。