登录后我有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
。
我可以再次检查什么?
答案 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