1

ログイン後にLoginActivityが結果を返すようにしました。ただし、onActivityResult()メソッドで常に 0 を取得しています。原因が掴めません。これが私のコードです:

MainActivity.java:

@Override
protected void onResume() {
    super.onResume();

    Intent intent = new Intent(this, LoginActivity.class);
    startActivityForResult(intent, R.id.login);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

     if (requestCode == R.id.login || resultCode==RESULT_OK)
    synchronizeContacts(R.id.contactList);
     }
}

LoginActivity.java:

private TaskCompleteListener<CsResult> taskCompleteListener = new TaskCompleteListener<CsResult>(){
    @Override
    public void onComplete(int requestId, CsResult result) {
        if (result==null || result.return_code!=0){
            String message = !TextUtils.isEmpty(result.return_message) ? result.return_message : getString(R.string.msg_invalid_user);
            JAppUtils.showMsg(LoginActivity.this, message, MsgType.ERROR);
            return;
        }
        Log.d(TAG, "***** I can see this is called ******");
        setResult(RESULT_OK);
        finish();
    }
};

public void loginClick(View view){
    LoginTask task = new LoginTask(this);
    task.setTaskCompleteListener(taskCompleteListener);
    task.setLoginUser("user_id", "password");
    task.execute(ServerConfig.URL);
}

デバッグまたはログを見ると、taskCompleteListener.onComplete()メソッドが正しくMainActivity呼び出され、callonActivitResult()メソッドに戻ります。RequestCode正しいですresultCodeが常にActivity.RESULT_CANCELです。

何をもう一度確認できますか?

4

4 に答える 4

2

これを試して:

  Log.d(TAG, "***** I can see this is called ******");
        setResult(RESULT_OK, new Intent());
     finish();
于 2012-08-30T07:23:49.467 に答える
1

これを試して

Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, 1); 

そして、あなたのonActivityResult()使用でこれ。

  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1 && resultCode == RESULT_OK && data != null )
    {                       
      // Here you can get the username and password         
    }       
}

そしてログインアクティビティで

 Intent intent = getIntent();
 intent.putExtra("UserName", user_id); // Place your information.
 intent.putExtra("Password", password);
 setResult(RESULT_OK, intent);  
 finish();

幸運を

于 2012-08-30T07:33:22.597 に答える
0

私は何か疑問に思っています。onActivityResult()メソッドを介して次のアプリケーションを呼び出すonResume()ため、例のアクティビティのライフサイクルは次のようになります。

onCreate -> onResume -> 次のアクティビティ -> メイン アクティビティに戻る -> ???

そして今、私の質問がonActivityResult()前後に呼ばれていonResume()ますか?onResume()現在のアクティビティがフォアグラウンドになるたびに呼び出されるためです。したがって、承認プロセスを行うたびに2番目のアクティビティが呼び出される場合があるのではないかと思います。

メイン アクティビティからログイン アクティビティに直接移動したいだけなら、onResume()スニペットを に入れてみませんonCreate()か? そうすれば、認証プロセスが 1 回呼び出されることを確認でき、私が見た場合とほとんど違いはありません。これが解決策だと言っているのではありません。

于 2012-08-30T07:37:25.650 に答える
-2

RESULT_OK を設定する代わりに、リクエスト コードの値を設定します。これは、Android で既に使用されているため、-1、0、および 1 であってはなりません。

E.g:
 startActivityForResult(5,new Intent());

and 
Intent intent = getIntent();
setResult(5, intent); 

Remember value must not be -1,0 or 1 as request code
于 2015-03-30T12:33:45.950 に答える