【问题标题】:Android App Crashes after Sharing using Facebook Dialogs使用 Facebook 对话框分享后 Android 应用程序崩溃
【发布时间】:2012-05-03 07:43:02
【问题描述】:

我正在尝试将 Facebook SDK 集成到 Android 项目中。我在 Facebook 对话框中发布了一条墙消息,当我点击“分享”时,该消息会成功发布在我的 Facebook 墙上。但是我的游戏还是崩溃了!

我从扩展 Activity 的主类中调用它。为了弹出 facebook UI 对话框,我使用 runOnUiThread。 (AsyncTask 在我的代码中不起作用。)

public static int fbShareScores( final String sBody ) 
{
try 
{   
  oThis.runOnUiThread ( 
    new Runnable ( ) 
    { 
      @Override
      public void run ( ) 
      { 
        Bundle params = new Bundle();
        params.putString("caption", "Caption");
        params.putString("description", sBody);
    params.putString("picture", URL_TO_PNG);
        params.putString("name", "Name");
        oThis.mFacebook.dialog(oThis, "feed", params, null);
      } 
    } 
  );
}
catch ( Exception e ) 
{ 
  Log.d(Globals.sApplicationName, "share scores: Dialog: " + e.getMessage());
}

return 1;
}

这是我在 logcat 中的错误:

D/Facebook-WebView(957):Webview 加载 URL: https://m.facebook.com/dialog/feed W/AudioFlinger(32):写被阻塞 80 毫秒,275 次延迟写入,线程 0xff88 D/dalvikvm(957): GC_CONCURRENT 释放 539K,15% 释放 7403K/8647K,暂停 3ms+47ms D/webviewglue(957): nativeDestroy 视图: 0x925250 D/Facebook-WebView(957):重定向 URL: fbconnect://success?post_id=570020602_418386674846932 D/AndroidRuntime(957): 关闭 VM W/dalvikvm(957): threadid=1: 线程以未捕获的异常退出(组 = 0x40014760) E/AndroidRuntime(957): 致命例外: 主要 E/AndroidRuntime(957): java.lang.NullPointerException E/AndroidRuntime(957): 在 com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:143) E/AndroidRuntime(957):在 android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:219) E/AndroidRuntime(957):在 android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:319) E/AndroidRuntime(957):在 android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(957): 在 android.os.Looper.loop(Looper.java:126) E/AndroidRuntime(957):在 android.app.ActivityThread.main(ActivityThread.java:3997) E/AndroidRuntime(957):在 java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(957):在 java.lang.reflect.Method.invoke(Method.java:491) E/AndroidRuntime(957):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) E/AndroidRuntime(957):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) E/AndroidRuntime(957): 在 dalvik.system.NativeStart.main(Native Method) W/ActivityManager(67):强制完成活动 com.companyname.mainclassname/.MainClassName

【问题讨论】:

  • 您是否在与 UI 线程不同的线程上运行它?
  • 我不确定我是否理解。我是 Android 开发的新手。我的游戏的主类 Activity 位于一个主线程上,该线程调用 runOnUiThread,它运行 Facebook 对话框。 FbDialog.java 是 Facebook 的 SDK,不知道 FB 是不是用了别的线程,我从我的游戏中引用。
  • 您使用的是常规 Facebook 类还是 AsyncFacebookRunner?如果你不使用后者,那么你没有理由使用 runOnUiThread 因为你在同一个线程上。这与 android 无关,它更像是 java 的东西,甚至更基础:使用线程。
  • 我正在使用 Facebook 的课程。当我不使用 runOnUiThread 时,我收到与不在 UI 线程上相关的错误。我设法绕过这个错误,通过传入一个 DialogListener,我将它设置为 null。
  • 听起来你在做一些奇怪的事情。你能编辑你的问题并添加更多相关代码吗?

标签: android facebook multithreading dialog


【解决方案1】:

当我将上面代码中的行更改为:

oThis.mFacebook.dialog(oThis, "feed", params, new PostStatusDialogListener());

然后添加一个新的DialogListener:

public class PostStatusDialogListener implements DialogListener 
{
  @Override
  public void onComplete(Bundle values) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onComplete");
  }

  @Override
  public void onFacebookError(FacebookError error) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onFacebookError: " + error.getMessage());
  }

  @Override
  public void onError(DialogError error) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::DialogError: " + error.getMessage());
  }

  @Override
  public void onCancel() {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onCancel");
  }
}

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2023-03-23
    • 2011-02-07
    相关资源
    最近更新 更多