在facebook教程中,我看到了这个示例代码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
使用此代码我收到: onAuthFail,错误=“已取消操作”。
删除
super.onActivityResult(requestCode, resultCode, data);
工作正常。
所以我的问题是:在哪里放置super.onActivityResult(requestCode,resultCode,data)? 在facebook回调之前,之后或删除它。在没有调用super.onActivityResult的时刻 - 代码工作正常。可以丢失导致问题吗?
我在清单中使用它:
<activity android:launchMode="singleInstance" android:name=".profile.LoginForm"
android:screenOrientation =“portrait”android:noHistory =“true”&gt;
这会产生问题吗?
在清单中放置'singleInstance'的原因是:避免重新启动我的登录表单。这个问题迫使当前出现问题。
答案 0 :(得分:5)
关于您的更新:
android:launchMode="singleInstance"
确实会导致startActivityForResult()
和onActivityResult()
出现问题。请参阅launchMode documentation:
另一方面,“singleInstance”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,则该活动将分配给另一个任务。
这意味着启动的facebook auth活动不是您当前任务的一部分,因此无法提供任何结果。如果您对此进行调试,您应该注意到在启动子活动后立即调用onActivityResult()
(这对于获得正确/有用的结果来说为时尚早)。
我会说你的launchMode改为不同的(也不是singleTask
,它有同样的问题)。
我不确定超类方法如何影响这个,因为你声称这个修复了它。理论上,这不应该与singleInstance
一起使用。
答案 1 :(得分:0)
如果您查看Activity.onActivityResult()
source code,您会发现它有点空。这意味着以下内容:
super
电话如何影响Facebook方法没有明显的方法。UPD:alextsc的评论提供了一个有效的假设。