0

android.view.WindowManager$BadTokenExceptionクラッシュ レポートにこのエラーが表示されます。一部のデバイスでは、例外が報告されるだけでアプリがクラッシュしません。他のデバイスではクラッシュが発生します。

これは、アプリがダイアログを表示する方法に関連しています。

他の回答は、グローバルなもののように間違ったものが使用されていることを示唆していますcontextが、私の場合はそうではなく、アクティビティのコンテキストを別のオブジェクトのメソッドに渡しています。

public class Utils {

メソッドを含む

public static void noConnection(Context context){
    final CustomAlertDialog alert = new CustomAlertDialog(context, context.getString(R.string.ErrorPastTense), context.getString(R.string.ErrorInternet), context.getString(R.string.OkButton), null);

    View.OnClickListener listener = new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            int id = v.getId();
            switch(id){
                case R.id.alertConfirm:
                    alert.dismiss();
                    break;
                default:
                    break;
            }
        }
    };
    alert.setListener(listener);
    alert.show();
}

このような私の活動のメソッドによって呼び出されますUtils.noConnection(myActivity.this);

エラーログは、例外が次の場所で発生していることを示していますalert.show()

なぜ?そして回避方法

4

1 に答える 1

1

UI Thread からダイアログを表示していますか? 次のようなものを試してください:

Handler handler = new Handler();
handler.post(new Runnable() {
    @Override
    public void run() {
        alert.show()
    }
});
于 2013-06-11T14:36:32.947 に答える