在登录表单之前收到onActivityResult

时间:2012-03-26 07:09:10

标签: android facebook login

在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的时刻 - 代码工作正常。可以丢失导致问题吗?

UPDATE:

我在清单中使用它:

<activity android:launchMode="singleInstance" android:name=".profile.LoginForm" 

android:screenOrientation =“portrait”android:noHistory =“true”&gt;

这会产生问题吗?

UPDATE2:

在清单中放置'singleInstance'的原因是:避免重新启动我的登录表单。这个问题迫使当前出现问题。

2 个答案:

答案 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的评论提供了一个有效的假设。