0

私はマルチスレッディングを使い始め、ユーザー入力を検証したかったので、ここで質問を見ました

それでも何らかの理由でアプリがクラッシュし、問題を特定できません

RegisterActivity.Java

@Override
    public void afterTextChanged(final Editable editable) {
        email = etEmail.getText().toString();
        new AsyncTask<Void, Void, Void>() {
            protected Void doInBackground(Void... params) {
                if( !isValidEmail(email))
                    LoginActivity.alertDialog(getApplicationContext(),"test","test");
                    return null;
            }

        }.execute();
    }

LoginActivity.java (はい、この関数がここにあってはならないことはわかっています)

  public static   void alertDialog(Context context, CharSequence message, CharSequence type){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setMessage(message)
                .setNegativeButton(type, null)
                .create()
                .show();
    }

スタックトレース

E/AndroidRuntime: FATAL EXCEPTION: main Process:com.example.ofir.bopofinal, PID: 3038
                                                                                  java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
                                                                                      at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:351)
                                                                                      at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:320)
                                                                                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:281)
                                                                                      at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:83)
                                                                                      at android.support.v7.app.AlertController.installContent(AlertController.java:214)
                                                                                      at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:258)
                                                                                      at android.app.Dialog.dispatchOnCreate(Dialog.java:394)
                                                                                      at android.app.Dialog.show(Dialog.java:295)
                                                                                      at com.example.ofir.bopofinal.LoginRegister.LoginActivity.alertDialog(LoginActivity.java:53)
                                                                                      at com.example.ofir.bopofinal.LoginRegister.RegisterActivity$3.onPostExecute(RegisterActivity.java:162)
                                                                                      at com.example.ofir.bopofinal.LoginRegister.RegisterActivity$3.onPostExecute(RegisterActivity.java:153)
                                                                                      at android.os.AsyncTask.finish(AsyncTask.java:651)
                                                                                      at android.os.AsyncTask.-wrap1(AsyncTask.java)
                                                                                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
4

3 に答える 3

0

だから、例外があなたに言うことをするだけです:

このアクティビティで Theme.AppCompat テーマ (または子孫) を使用する必要があります。

編集:

ApplicationContext を AlertDialog.Builder() コンストラクターに渡しています。ビルダーはそのコンテキストからテーマを取得しようとします。これはアクティビティではなく ApplicationContext であるため、アプリケーション自体のテーマを取得しますが、これは Theme.AppCompat または子孫ではないようです。

コードの多くを書き直さなくても、thisresp. (AyncTask 内から呼び出す場合)使用RegisterActivity.thisするalertDialog()コンテキストとして。

于 2016-11-27T19:59:01.350 に答える
0

background からExceptionを表示しようとしているため、おそらく を取得しています。電子メールが内部で有効かどうかを確認する必要があります。そうでない場合は、UI で実行されるため、ダイアログが表示されます。DialogThreadonPreExecute()Thread

于 2016-11-27T19:16:19.393 に答える