No se puede abrir AlertDialog desde QuickAction

Intenté mostrar AlertDialog cuando se presiona un botón en QuickAction. Pero mi aplicación se bloquea al intentar realizar esta tarea. No sé qué está causando el error. También intenté usar Thread.sleep para dar tiempo a que QuickAction se atenúe. correctamente y mostrar AlertDialog pero no funcionó.

Investigué y encontré una pregunta: Iniciar el diálogo desde el botón QuickAction

Esta pregunta es algo similar a la mía, pero cuando intenté reemplazar getApplicationContext () con MyClass.class, recibí un error que decía que el constructor AlertDialog.builder (Class) no está definido.

El siguiente es el fragmento de código QuickAction y AlertDialog:

ActionItem editQItem = new ActionItem(ID_EDIT_Q, "Edit", getResources()
            .getDrawable(R.drawable.qa_edit));
    ActionItem deleteQItem = new ActionItem(ID_DELETE_Q, "Delete",
            getResources().getDrawable(R.drawable.qa_delete_answer));
    System.out.println("Blah 1");

    mQuickActionQ = new QuickAction(this);
    mQuickActionQ.addActionItem(editQItem);
    mQuickActionQ.addActionItem(deleteQItem);
    System.out.println("Blah 2");

    // setup the action item click listener
    mQuickActionQ
            .setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                public void onItemClick(QuickAction quickAction, int pos,
                        int actionId) {
                    ActionItem actionItem = quickAction.getActionItem(pos);
                    System.out.println("Blah 3");
                    if (actionId == ID_EDIT_Q) {
//Here im getting error from here onwards when trying to display AlertDialog
                        et_question = new EditText(getApplicationContext());
                        et_tag1 = new EditText(getApplicationContext());
                        et_tag2 = new EditText(getApplicationContext());
                        et_tag3 = new EditText(getApplicationContext());
                        et_question.setText(question);
                        et_tag1.setText(q_tag1);
                        et_tag2.setText(q_tag2);
                        et_tag3.setText(q_tag3);
                        tv_question = new TextView(getApplicationContext());
                        tv_question.setText("Question:");
                        tv_question.setTextSize(15);
                        tv_tags = new TextView(getApplicationContext());
                        tv_tags.setText("Tags:");
                        tv_tags.setTextSize(15);
                        ll_edit = new LinearLayout(getApplicationContext());
                        ll_edit.setOrientation(1);
                        ll_edit.addView(tv_question);
                        ll_edit.addView(et_question);
                        ll_edit.addView(tv_tags);
                        ll_edit.addView(et_tag1);
                        ll_edit.addView(et_tag2);
                        ll_edit.addView(et_tag3);
                        AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
                        builder.setMessage("Edit");
                        builder.setCancelable(true);
                        builder.setView(ll_edit);
                        builder.setPositiveButton("Save Changes",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        boolean Success = true;
                                        Editable ttv = et_question.getText();
                                        final String answer = new StringBuilder().append(
                                                ttv).toString();
                                        if (answer.equals("")) {
                                            Dialog mTag = new Dialog(
                                                    getApplicationContext());
                                            mTag.setTitle("One of the field is empty!");
                                            TextView tv2 = new TextView(
                                                    getApplicationContext());
                                            tv2.setText("Blank fields are not allowed.");
                                            mTag.setContentView(tv2);
                                            mTag.setCancelable(true);
                                            mTag.show();
                                        } else {
                                            String uname = qun.getText().toString();
                                            String question = qu.getText().toString();
                                            String question_time = qpo.getText().toString();
                                            String new_question = et_question.getText()
                                                    .toString();
                                            String new_tag1 = et_tag1.getText().toString();
                                            String new_tag2 = et_tag2.getText().toString();
                                            String new_tag3 = et_tag3.getText().toString();
                                            uf = new UserFunctions();
                                            HashMap<String, String> hm = new HashMap<String, String>();
                                            db = new DatabaseHandler(
                                                    getApplicationContext());
                                            db.getReadableDatabase();
                                            hm = db.getUserDetails();
                                            db.close();
                                            String username = hm.get("username");
                                            JSONObject json = uf.updateQuestion(username,
                                                    question, question_time, new_question,
                                                    new_tag1, new_tag2, new_tag3);
                                            dialog.dismiss();
                                            pd = ProgressDialog.show(ViewMyQuestion.this,
                                                    "Please wait...",
                                                    "Updating your question!", true, false);
                                            Thread thread = new Thread(ViewMyQuestion.this);
                                            thread.start();
                                            tagcombo = new_tag1 + "," + new_tag2 + ","
                                                    + new_tag3;
                                            qun.setText(username);
                                            qtag.setText(tagcombo);
                                            qu.setText(new_question);
                                        }// end of if else
                                    }
                                });

                        builder.setNegativeButton("Cancel",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    } else {
                        System.out.println("Blah 4");
                        Toast.makeText(getApplicationContext(),
                                actionItem.getTitle() + " selected",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });

    mQuickActionQ.setOnDismissListener(new QuickAction.OnDismissListener() {
        public void onDismiss() {
            Toast.makeText(getApplicationContext(), "Ups..dismissed",
                    Toast.LENGTH_SHORT).show();
        }
    });

Los siguientes son los mensajes de Logcat:

07-05 18:01:27.158: E/AndroidRuntime(389): FATAL EXCEPTION: main
07-05 18:01:27.158: E/AndroidRuntime(389): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.view.ViewRoot.setView(ViewRoot.java:509)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.app.Dialog.show(Dialog.java:241)
07-05 18:01:27.158: E/AndroidRuntime(389):  at com.vervecoders.cuqu.ViewMyQuestion$3.onItemClick(ViewMyQuestion.java:222)
07-05 18:01:27.158: E/AndroidRuntime(389):  at com.vervecoders.cuqu.QuickAction$2.onClick(QuickAction.java:162)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.view.View.performClick(View.java:2408)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.view.View$PerformClick.run(View.java:8816)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.os.Handler.handleCallback(Handler.java:587)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.os.Looper.loop(Looper.java:123)
07-05 18:01:27.158: E/AndroidRuntime(389):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-05 18:01:27.158: E/AndroidRuntime(389):  at java.lang.reflect.Method.invokeNative(Native Method)
07-05 18:01:27.158: E/AndroidRuntime(389):  at java.lang.reflect.Method.invoke(Method.java:521)
07-05 18:01:27.158: E/AndroidRuntime(389):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-05 18:01:27.158: E/AndroidRuntime(389):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-05 18:01:27.158: E/AndroidRuntime(389):  at dalvik.system.NativeStart.main(Native Method)

Gracias

Respuesta 1

Estoy usando Spring RestTemplate y necesito forzar a mi cliente a enviar una solicitud HTTP a través de una interfaz de red específica. Ya encontré una solución usando java socket: NetworkInterface nif = ...

Obtengo el siguiente stacktrace en una aplicación Grails 2.0.4: java.lang.ArrayIndexOutOfBoundsException: 6170 en com.springsource.loaded.NameRegistry.getIdFor (NameRegistry.java:44) en ...

Estoy enviando un objeto json a una URL REST como: JSONObject loan = new JSONObject (); loan.put ("clientId", "1"); loan.put ("productId", "1"); Ahora también tengo que enviar una matriz como parte de la carga útil: {...

¿Cuál es la forma ideal de crear un video en la plataforma Android usando JAVA? Intenté usar ffmpeg pero realmente tuve problemas para compilarlo. Sé que hay una clase que admite todas estas cosas en iOS, ...