所以,我一直在研究这个问题一段时间,我觉得我越来越接近理解问题但不是解决方案。这是......
我有一个Activity(A类),它通过startActivityForResult()调用另一个Activity(Class B)。 B类是我的OAuth处理程序,它在启动AsyncTask之前准备URL请求,以通过Internet向提供程序进行身份验证。它通过调用具有该URL的intent来完成此操作,该URL启动浏览器并将我带到用户登录页面。我登录并授权应用程序然后将我带回到我认为的B类。但是,这就是问题所在。
看来,在返回应用程序时,Android已创建了我的B类活动的另一个实例,并执行了onResume()方法而不是上面创建AsyncTask的方法。这是一个问题,因为当我调用finish时,它所做的只是杀死B类的实例,然后再回到B类的第一个实例。这是一个问题,因为我需要传递B类的结果回到A级,所以我知道操作是成功的。如果我然后完成()B类的第一个实例,它会将RESULT_FAILED代码传回给A类......
我错过了一些非常明显的东西吗?如果您想查看一些代码,请告诉我。
更新:我添加了一些代码以使其更清晰:
A类(调用B类时):
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.cancel();
Intent intent = new Intent();
intent.setClass(myContext, ClassB.class);
startActivityForResult(intent, LIKE_ACTION);
}
}
B类(当调用URL以对提供程序进行身份验证时,在AsyncTask中调用它):
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
myContext.startActivity(intent);
myContext是B类。此时,浏览器会加载URL,允许用户登录并授权应用程序。该应用程序已获得授权,并且会调用B类。完成了一些进一步的工作,然后调用完成。如上所述,当调用finish()时,必须调用两次。我在模拟器中这样做,有时候我可以看到动画变化的动画。
B类(调用关闭活动的代码):
Intent tokenAndSecret = new Intent();
tokenAndSecret.putExtra("Token",mSettings.getString(USER_TOKEN, null));
tokenAndSecret.putExtra("Secret",mSettings.getString(USER_SECRET, null));
setResult(Activity.RESULT_OK, tokenAndSecret);
finish();
调用Finish,但是我需要调用它两次。我通过禁用对上面代码的自动调用并在活动中放置一个按钮来执行它来测试它。正如所料,我不得不按两次按钮。