返回来自Android Activity的字符串以`onClickListener`中的`startActivityForResult`开头,返回null

时间:2016-03-14 19:52:28

标签: java android android-fragments android-intent

我使用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}}。

5 个答案:

答案 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来解决问题,如前两个答案中所述。