从Android应用程序向Facebook提交高分的麻烦

时间:2014-11-25 19:05:45

标签: android facebook java-native-interface

当我尝试使用下面的代码向Facebook发布高分时,我收到此错误:

Invalid indirect reference 0x12341234 in decodeIndirectRef

执行请求时会发生错误。

Bundle params = new Bundle();
params.putString("score", "123");

Request postScoreRequest = new Request(session, 
                                       "/me/scores", 
                                       params, 
                                       HttpMethod.POST, 
                                       new Request.Callback() {
                @Override
                public void onCompleted(Response response) {
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Log.d("test", "error: " + error);
                    } else {
                        Log.d("test", "success");
                    }
                }
});
postScoreRequest.executeAsync();

上述Java代码是通过JNI从C ++调用的。我有许多类似的C ++到Java JNI方法,可以正常工作。当用户首次登录Facebook时,我尝试运行上面的高分提交代码(因此没有涉及JNI),我没有看到崩溃。

为什么通过JNI调用上面的代码会导致错误?

编辑:我注意到这次崩溃发生在从C ++到Java的下一次JNI调用中。它与高分完全无关。如果我评论postScoreRequest.executeAsync()那么崩溃就会消失。我试图弄清楚这条线是如何影响JNI的。

编辑:在UI线程上显式创建和执行请求。我仍然想知道为什么会这样。

1 个答案:

答案 0 :(得分:1)

假设您的C ++代码运行在与UI线程不同的线程上(因为它是游戏 - >可能是OpenGL - > G1渲染器启动它自己的线程):您的Java线程也不是在UI线程和Facebook的executeAsync应该在UI线程上运行:

https://developers.facebook.com/docs/reference/android/3.0/class/Request/#executeAsync%28%29

  

executeAsync()执行此请求并返回响应。这应该只从UI线程调用。

P.S。为了解决这个问题,我打电话给runOnUiThread