onActivityResult始终返回0

时间:2012-08-30 07:19:34

标签: android android-activity

登录后我有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来调用onActivitResult()方法。 RequestCode是正确的,但resultCode始终为Activity.RESULT_CANCEL

我可以再次检查什么?

4 个答案:

答案 0 :(得分:2)

试试这个:

  Log.d(TAG, "***** I can see this is called ******");
        setResult(RESULT_OK, new Intent());
     finish();

答案 1 :(得分: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();
祝你好运

答案 2 :(得分:0)

我想知道一些事情。您可以在onActivityResult()方法中通过onResume()调用下一个应用程序,因此示例中活动的生命周期就是这样。

onCreate - &gt; onResume - &gt;下一个活动 - &gt;回到主要活动 - &gt; ???

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

如果您只想直接从主要活动转移到登录活动,为什么不将onResume()摘录放在onCreate()?这样你就可以确保授权过程被调用一次,而且我看到它的方式几乎没有区别。我并不是说这是解决方案,只是提供了一些我注意到的想法。

答案 3 :(得分:-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