2

选择注销首选项时,我的 startActivityForResult 没有返回到 onActivityResult。奇怪的是,在我开始转换为使用 REST 调用之前,我很确定它曾经可以工作,但我不知道可能发生了什么变化。MainOverview 活动调用设置活动。是的,MainOverview 省略了 onCreate 方法,因为我认为它在这里并不重要。这是 MainOverview 代码:

public class MainOverviewActivity extends BaseActivity implements OnClickListener
{
  public void onClick(View v)
  {
    switch(v.getId())
    {
    case R.id.show_settings:
      openSettings();
      break;
    }
  }

  public static final String INTENT_RESULT_LOGOUT = "logout";

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    super.onActivityResult(requestCode, resultCode, data);
    Log.i("MainOverviewActivity", "onActivityResult before finish() :)");

    if(requestCode == 123)
    {
      if(resultCode == Activity.RESULT_OK)
      {
        if(data.getBooleanExtra(SettingsActivity.INTENT_RESULT_LOGOUT, false))
        {
           Log.i("MainOverviewActivity", "finish() :)");

           Intent i = new Intent(this, LoginActivity.class);
           startActivity(i);

           finish();
        }
      }
    }
  }

  protected void openSettings()
  {
    Intent intent = new Intent(this, SettingsActivity.class);
    startActivityForResult(intent, 123);
  }
}

这是我的设置活动代码:

public class SettingsActivity extends PreferenceActivity 
{

  public static final String INTENT_RESULT_LOGOUT = "logout";

  @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    Intent returnIntent = new Intent();
    returnIntent.putExtra(INTENT_RESULT_LOGOUT, true);
    setResult(RESULT_OK, returnIntent);
    finish();
  }

这是我的 settings.xml 页面,我在预览页面上收到“com.android.layoutlib.bridge.android.BridgeXmlBlockParser.next(BridgeXmlBlockParser.java:301) 处的 java.lang.NullPointerException”,但我没有想法为什么:

  <?xml version="1.0" encoding="utf-8"?>
  <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Server account">
        <Preference
            android:title="Logout"
            android:key="logout" />
        <Preference
            android:title="Version"
            android:key="version" />
    </PreferenceCategory>
  </PreferenceScreen>

它进入 MainOverview 中的 onResume(),但不是 onActivityResult(),我不知道为什么。结果代码高于 0。任何建议都会很棒。我已经阅读了其他几个 StackOverflow 页面,但还没有看到答案。我没有在任何地方设置启动模式。我没主意了。

我已经为此工作了一个星期,但仍然卡住了。

提前致谢!

德文

4

3 回答 3

1

代替

setResult(123, returnIntent);

setresult(RESULT_OK, returnIntent);

结果代码是第一个参数 - 123 只有调用活动知道

于 2014-01-04T02:23:34.747 回答
0

我认为您在注销时不需要检查父母。使用以下安装。

public void logout() 
{

Intent returnIntent = new Intent();
returnIntent.putExtra(INTENT_RESULT_LOGOUT, true);

setResult(Activity.RESULT_OK, returnIntent);

finish();
}
于 2013-12-27T21:17:52.780 回答
0

在一些帮助下,我终于发现代码在另一个类中返回到 onResume(),这是创建 LoginActivity 的地方。它仍然永远不会返回到 onActivityResult,这对我来说没有意义,但它至少可以再次工作。

再次感谢你的帮助!我从你的建议中学到了很多东西。

于 2014-01-13T20:12:32.737 回答