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ページです。プレビューページで「java.lang.NullPointerException at com.android.layoutlib.bridge.android.BridgeXmlBlockParser.next(BridgeXmlBlockParser.java:301)」を取得していますが、何もありませんアイデア理由:

  <?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() には到達しません。その理由がわかりません。Resultcode が 0 を超えています。他のいくつかの StackOverflow ページを読みましたが、まだ回答がありません。launchMode をどこにも設定していません。私はアイデアがありません。

私は一週間それに取り組んできましたが、まだ立ち往生しています。

前もって感謝します!

デヴィン

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 に答える