2012-05-03 13 views
1

FacebookのSDKをAndroidプロジェクトに統合しようとしています。私はFacebookのダイアログで壁のメッセージを投稿しています。「共有」を押すと、メッセージはFacebookの壁に正常に投稿されます。しかし、私のゲームはまだクラッシュする!Facebookのダイアログを使ってAndroid Appを共有した後でクラッシュする

アクティビティを拡張するメインクラスから呼び出す。 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( (957):80 msec、275遅延書き込み、スレッド0xff88 D/dalvikvm(957): GC_CONCURRENT解放539K、15%フリー7403K/8647K、一時停止3ms + 47ms D/webviewglue(957):nativeDestroyビュー: 0x925250 D/Facebook-WebView(957):リダイレクトURL: fbconnect:// succes (957):threadid = 1: キャッチされない例外(グループ= 0x40014760)でスレッドが終了する E/AndroidRuntime(957):致命的な例外:main 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)にて: アンドロイドで。 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(ネイティブメソッド) 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):at dalvik.system.NativeStart.main(ネイティブ メソッド)W/ActivityManエージャー(67):私は上記のコードの行を変更したときに強制 com.companyname.mainclassname/.MainClassName

+0

あなたはすべてUIとは異なるスレッドで実行していますか? –

+0

わかっても分かりません。私はAndroid開発の初心者です。私のゲームのメインクラスのアクティビティはメインスレッド上にあり、Facebookダイアログを実行するrunOnUiThreadを呼び出します。 FbDialog.javaはFacebookのSDKですが、FBが別のスレッドを使用しているかどうかわかりません。 – Lisa

+0

通常のFacebookクラスまたは* AsyncFacebookRunner *を使用していますか?後者を使用していない場合は、同じスレッド上にあるので、runOnUiThread *を使用する理由はありません。これはアンドロイドとは関係がありません。それはJavaのものであり、さらに基本的なものです:スレッドを扱うことです。 –

答えて

0

を活動を終えて、エラーがなくなっている:

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"); 
    } 
} 
関連する問題