Android onActivityResult始终返回0

Android onActivityResult始终返回0,android,android-activity,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.

我让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);
     }
}
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);
}
LoginActivity.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);
     }
}
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);
}
private TaskCompleteListener TaskCompleteListener=new TaskCompleteListener(){
@凌驾
public void onComplete(int requestId,CsResult){
if(result==null | | result.return_code!=0){
String message=!TextUtils.isEmpty(result.return\u message)?result.return\u message:getString(R.String.msg\u无效用户);
showMsg(LoginActivity.this,message,MsgType.ERROR);
返回;
}
Log.d(标记,“******我可以看到它被称为******”;
设置结果(结果\正常);
完成();
}
};
公共无效登录单击(查看){
LoginTask任务=新的LoginTask(此任务);
task.setTaskCompleteListener(taskCompleteListener);
task.setLoginUser(“用户id”、“密码”);
task.execute(ServerConfig.URL);
}
调试或查看日志时,
taskCompleteListener.onComplete()
方法正确调用并返回
MainActivity
以调用
onActivitResult()
方法<代码>请求代码
正确,但
结果代码
始终是
活动。结果\u取消

我可以再次检查什么?

尝试以下操作:

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

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

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();
祝你好运试试这个

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

祝你好运,我想知道一些事情。通过
onResume()
方法中的
onActivityResult()
调用下一个应用程序,因此示例中的活动生命周期如下所示

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

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


如果您只想直接从主活动移动到登录活动,为什么不将
onResume()
代码段放入
onCreate()
?这样,您就可以确定授权过程只调用了一次,并且与我所看到的几乎没有区别。我不是说这就是解决方案,只是提供了我注意到的一些想法。

我想知道一些事情。通过
onResume()
方法中的
onActivityResult()
调用下一个应用程序,因此示例中的活动生命周期如下所示

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

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


如果您只想直接从主活动移动到登录活动,为什么不将
onResume()
代码段放入
onCreate()
?这样,您就可以确定授权过程只调用了一次,并且与我所看到的几乎没有区别。我并不是说这就是解决方案,只是提供了我注意到的一些想法。

设置结果的Instaed\u 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

设置结果的Instaed_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

我之所以在onResume()方法中输入login,是因为我想一直显示登录活动,直到用户成功登录为止。用户可以按home按钮退出我的应用程序,但我希望我的应用程序始终像home launcher一样在顶部运行。如果我将登录名放在onCreate()方法中,当用户点击home按钮时,登录活动将在未登录的情况下消失。Ok。我不完全理解为什么您希望使用
onResume()
方法启动登录
活动
,但我想这是有原因的。你能帮我调试一下吗?在
onResume()
的开头和
onActivityResult()
中放置断点。然后告诉我哪个断点先命中。我之所以把login放在onResume()方法中,是因为我想一直显示登录活动,直到用户成功登录为止。用户可以按home按钮退出我的应用程序,但我希望我的应用程序始终像home launcher一样在顶部运行。如果我将登录名放在onCreate()方法中,当用户点击home按钮时,登录活动将在未登录的情况下消失。Ok。我不完全理解为什么您希望使用
onResume()
方法启动登录
活动
,但我想这是有原因的。你能帮我调试一下吗?在
onResume()
的开头和
onActivityResult()
中放置断点。然后告诉我哪个断点先命中。或者使用日志记录,任何适合您的方法。您是否尝试过调试它。您是否检查了您的
putExtra()
是否有价值?当然,我尝试了好几次,但都没有成功。只有requestCode是我所期望的,而其他的则不是。实际上,作为问题主题的setResult确实有效。我也有同样的问题,这就解决了。对我不起作用的是多余的。虽然它确实在该intent实例中添加了额外的值,但在onActivityResu上调用活动接收到的intent中从未出现过这些值