繁体   English   中英

从Android活动返回字符串(在onClickListener内以`startActivityForResult`开头)返回null

[英]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_CANCELEDdata对象都为null 。 这就是为什么您没有获得在Intent中设置的值的原因。

首先尝试获得的价​​值

txaMatches.getText()。toString()

在MatchesActivity类中检查此值。

由于您遇到问题,有可能返回空值。

如前两个答案所述,通过从onDestroy删除finishThisAndReturnString()来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM