整合Facebook-android-sdk-3.0时,可能会抛出Resources$NotFoundException异常。

5

我正在尝试在我的应用程序中集成Facebook。但是,当我点击fbphoto时,它会抛出错误android.content.res.Resources$NotFoundException。我知道它会在运行时抛出错误,因为找不到适当的资源。

发现错误是在facebook.authorize(this, new String[] { "email", "publish_stream"}, new DialogListener() {}处抛出的。但根本原因仍然不清楚。

fbphoto.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            loginToFacebook();
        }
    });

public void loginToFacebook()
{
if(!facebook.isSessionValid())
    {
        facebook.authorize(this, new String[] { "email", "publish_stream"}, new DialogListener() {

        });
    }

02-08 02:57:58.236: E/AndroidRuntime(1582): FATAL EXCEPTION: main
02-08 02:57:58.236: E/AndroidRuntime(1582): android.content.res.Resources$NotFoundException: String resource ID #0x7f050011
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.content.res.Resources.getText(Resources.java:201)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.content.res.Resources.getString(Resources.java:254)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.content.Context.getString(Context.java:183)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.widget.WebDialog.onCreate(WebDialog.java:188)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.app.Dialog.show(Dialog.java:225)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.AuthorizationClient$WebViewAuthHandler.tryAuthorize(AuthorizationClient.java:462)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:210)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:189)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.AuthorizationClient.authorize(AuthorizationClient.java:117)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.AuthorizationClient.startOrContinueAuth(AuthorizationClient.java:98)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.Session.tryLegacyAuth(Session.java:1096)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.Session.authorize(Session.java:893)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.Session.open(Session.java:957)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.Session.openForPublish(Session.java:415)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.android.Facebook.openSession(Facebook.java:319)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.android.Facebook.authorize(Facebook.java:313)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.facebook.android.Facebook.authorize(Facebook.java:149)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.example.splashscreen.SecondScreen.loginToFacebook(SecondScreen.java:110)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.example.splashscreen.SecondScreen$1.onClick(SecondScreen.java:73)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.view.View.performClick(View.java:2485)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.view.View$PerformClick.run(View.java:9080)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.os.Handler.handleCallback(Handler.java:587)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.os.Looper.loop(Looper.java:123)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at android.app.ActivityThread.main(ActivityThread.java:3683)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at java.lang.reflect.Method.invokeNative(Native Method)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at java.lang.reflect.Method.invoke(Method.java:507)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-08 02:57:58.236: E/AndroidRuntime(1582):     at dalvik.system.NativeStart.main(Native Method)
2个回答

8
请注意,如果您在运行IntelliJ并将Facebook源代码作为库模块包含在项目中,那么此错误也会发生。
目前尚不清楚是什么原因导致此问题发生,但是当在IntelliJ项目中包含Facebook项目(整个树)作为库模块时,Facebook的strings.xml文件有时会被简化的strings.xml文件覆盖,从而在Facebook登录屏幕上导致“资源未找到”异常破坏您的应用程序。此外,Facebook AndroidManifest有时还会被覆盖,并导致编译时问题。
替换虚假的strings.xml和AndroidManifest.xml文件将解决此问题。

谢谢。这解决了我的问题。我对IntelliJ真的很生气。 - Cristian Holdunu
我非常同意。我追寻了整整一天,直到找到了这个答案。 - PeteH
我已经删除了 Facebook SDK 文件夹 3 或 4 次,然后才意识到 Intellij 确实做了那件恶心的事情。这太疯狂了。 - Thai Tran

4

从堆栈跟踪来看,错误是由这一行引起的:

spinner.setMessage(getContext().getString(R.string.com_facebook_loading));

源代码在这里

资源在res/values/string.xml中正确定义。

显然,错误不在facebook-android-sdk中。

我猜测你的项目设置有问题。你可以按照指南正确设置你的项目。


我已经抓狂了几个小时了。感谢您指引我走向正确的方向。 - Vikalp Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接