[解決済み] Unable to add window -- android.os.BinderProxy is not valid; is your activity running?
質問
Facebook APIを使ってFacebookに接続したいのですが、以下のような例があります。 https://github.com/facebook/facebook-android-sdk/tree/master/examples/simple
全てOKなのですが、コードを編集しようとすると、ログイン成功後にダイアログの投稿メッセージをこのように表示させたいということなのです。
public void onAuthSucceed() {
mText.setText("You have logged in! ");
//This is the code to call the post message dialog.
mFacebook.dialog(Example.this, "feed",new SampleDialogListener());
}
logcatにこのようなエラーが表示されます。
03-02 13:32:08.629: E/AndroidRuntime(14991): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@405180f8 is not valid; is your activity running?
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.ViewRoot.setView(ViewRoot.java:532)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.app.Dialog.show(Dialog.java:241)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook.dialog(Facebook.java:780)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook.dialog(Facebook.java:737)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Example$SampleAuthListener.onAuthSucceed(Example.java:113)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.SessionEvents.onLoginSuccess(SessionEvents.java:78)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Example$LoginDialogListener.onComplete(Example.java:88)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook$1.onComplete(Facebook.java:320)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:144)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:218)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:337)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.os.Looper.loop(Looper.java:130)
03-02 13:32:08.629: E/AndroidRuntime(14991): at android.app.ActivityThread.main(ActivityThread.java:3687)
03-02 13:32:08.629: E/AndroidRuntime(14991): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:32:08.629: E/AndroidRuntime(14991): at java.lang.reflect.Method.invoke(Method.java:507)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-02 13:32:08.629: E/AndroidRuntime(14991): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-02 13:32:08.629: E/AndroidRuntime(14991): at dalvik.system.NativeStart.main(Native Method)
何か思い当たることは?
どのように解決するのですか?
これは、もはや存在しないコンテキストのダイアログを表示するときに発生する可能性があります。よくあるケースは、'show dialog' 操作が非同期操作の後にあり、その操作中に元のアクティビティ (ダイアログの親であること) が破棄される場合です。良い説明は、このブログ記事とコメントを参照してください。
http://dimitar.me/android-displaying-dialogs-from-background-threads/
上記のスタックトレースから、facebook ライブラリが認証操作を非同期でスピンオフしているように見えますが、このシナリオを簡単に作成できる Handler - Callback メカニズム (onComplete がリスナーに呼び出される) を持っています。
私のアプリでこの報告があったとき、それはかなりまれで、ブログ投稿の経験に一致します。アクティビティに何か問題が発生したか、AsyncTask の作業中に破壊されたのです。あなたの修正がどのように毎回この結果になるのか分かりませんが、おそらく、コードが実行されるまでに常に破棄されるダイアログのコンテキストとしてアクティビティを参照しているのでしょうか。
また、アクティビティが実行されているかどうかを判断するのに最適な方法かどうかはわかりませんが、そうするための1つの方法として、この回答を参照してください。
関連
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
Androidのadbデバイスがオフラインであることが判明
-
Android.mk:7: *** セパレータがありません。
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
アンドロイドのエリプサイズを使用する
-
Android基本アプレット
-
アンドロイドの遅延実行のいくつかの方法
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
android.os の NetworkOnMainThreadException。
-
エラーが発生しました。ArrayAdapter は、リソース ID が TextView である必要があります。
-
JVMのエラーに遭遇しました。Java Runtime Environmentによって致命的なエラーが検出されました。
-
Android ProgressBarの色を変更する
-
Android基本アプレット
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない
-
[解決済み] エラー : BinderProxy@45d459c0 is not valid; activity is running?