我使用Intent
中的MainActivity
使用Activity
启动另一个名为MatchesActivity
的{{1}} startActivityForResult
。我将finish()
内的断点放在已启动的活动(MatchesActivity
)内以及Log
内的onActivityResult
语句中,因为我在onActivityResult
内找到了NPE。
intent.getStringExtra("TXAMATCHES")
包含应有的内容。
但是Intent data
会回来null
。
这可能/可能是因为我在Intent
听众中启动了onClick
吗?
或者因为MatchesActivity
在另一个扩展AsyncTask
的类中调用一个方法,而数据是该任务产生的? (但是在txaMatches
返回MainActivity
之前public class MainActivity extends Activity
{
...
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v)
{
...
Intent matchesIntent;
matchesIntent = new Intent(MainActivity.this, MatchesActivity.class);
startActivityForResult(matchesIntent, 0);
...
}
...
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Log.w("MainActivity","" + onActivityResult " + data.getStringExtra("TXAMATCHES"));
}
}
中找到了正确的数据...)
public class MatchesActivity extends Activity implements DatabaseConnector.DatabaseProcessListener
{
...
@Override protected void onDestroy()
{
super.onDestroy();
finishThisAndReturnString();
}
public void finishThisAndReturnString()
{
Intent intent = new Intent();
intent.putExtra("TXAMATCHES",txaMatches.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
...
Activity
(用户按back
图标即可终止{{1}}。
答案 0 :(得分:2)
您无法在onDestroy方法中完成活动。在这个生命周期阶段,活动已经消亡。
finish()方法的调用将调用onDestroy,而不调用另一个。
如果要完成MatchesActivity,请调用finish方法。
答案 1 :(得分:1)
你要做的不正确。您正尝试在finish()
方法上致电onDestroy()
。当活动即将被杀死时,onDestroy()
被调用。所以基本上在那时调用finish()
是错误的。
我假设您正尝试在AsyncTask
中进行一些处理。我建议你在AsyncTask的finish()
()方法上调用onPostExecute
方法。
答案 2 :(得分:1)
您正在onDestroy()
方法中设置Intent对象中的数据。因此,在这种情况下,只要您在setResult()
方法中调用onDestroy()
,就会始终在onActivityResult()
中将resultCode作为' 0'这是RESULT_CANCELED
的值,只要您在RESULT_CANCELED
中获得onActivityResult()
,就会使data
对象为空。这就是为什么你没有获得你在Intent中设置的值的原因。
答案 3 :(得分:0)
首先尝试获取
的值txaMatches.getText()。的toString()
在MatchesActivity类中检查此值。
由于你遇到问题,它可能会返回空值。
答案 4 :(得分:0)
通过从finishThisAndReturnString()
移除onDestroy
来解决问题,如前两个答案中所述。