
[英]startActivityForResult returning null when back navigation to activity sending result returns
[英]Returning string from Android Activity started with `startActivityForResult` inside `onClickListener` returns null
我在MainActivity
使用Intent
通过startActivityForResult
启动另一个名为MatchesActivity
Activity
。 我在启动活动( MatchesActivity
finish()
内的finish()
和onActivityResult
内的Log
语句上放置了断点,因为我在onActivityResult
内获得了NPE。
intent.getStringExtra("TXAMATCHES")
包含应包含的内容。
但是Intent data
返回null
。
这是否可能/可能是因为我在onClick
侦听器中启动了Intent
?
还是因为MatchesActivity
在另一个扩展AsyncTask
类中调用一个方法而该任务产生的数据是什么? (但是在返回到MainActivity
之前,在txaMatches
找到了正确的数据...)
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
图标来终止。)
您无法使用onDestroy方法完成活动。 在这个生命周期阶段,活动已经死了。
调用finish()方法将调用onDestroy,而不是另一个。
当您要完成MatchesActivity时,请调用finish方法。
您尝试做的是不正确的。 您试图在onDestroy()
方法上调用finish()
。 当Activity即将被杀死时, onDestroy()
被调用。 因此,基本上在那时调用finish()
是错误的。
我假设您正在尝试在AsyncTask
进行一些处理。 我建议您在AsyncTask的onPostExecute
()方法上调用finish()
方法。
您正在onDestroy()
方法中的Intent对象中设置数据。 因此,在这种情况下,每当您在onDestroy()
方法中调用setResult()
时,您将始终在onActivityResult()
获得resultCode为'0',这是RESULT_CANCELED
的值,并且每当您在onActivityResult()
获得RESULT_CANCELED
, data
对象都为null 。 这就是为什么您没有获得在Intent中设置的值的原因。
首先尝试获得的价值
txaMatches.getText()。toString()
在MatchesActivity类中检查此值。
由于您遇到问题,有可能返回空值。
如前两个答案所述,通过从onDestroy
删除finishThisAndReturnString()
来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.