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);
     }
}

登录活动.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调用onActivitResult()方法。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()您通过in方法调用下一个应用程序,onResume()因此示例中的活动生命周期如下所示。

onCreate -> onResume -> 下一个活动 -> 返回主活动 -> ???

现在我的问题是onActivityResult()之前onResume()还是之后?因为onResume()只要当前活动进入前台就会调用。所以我想知道是否是每次您进行授权过程时都会调用您的第二个 Activity 。

如果你只是想直接从主 Activity 移动到登录 Activity,你为什么不把onResume()代码片段放进onCreate()去呢?这样你就可以确定授权过程被调用一次,而且我看到的方式几乎没有什么不同。我并不是说这是解决方案,只是提供一些我注意到的想法。

于 2012-08-30T07:37:25.650 回答
-2

设置 RESULT_OK 设置请求代码的值不能为 -1,0 和 1,因为它已被 Android 使用。

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 回答