2015-07-13 2 views
0

Я борюсь с этой ошибкой с двух дней, и я не могу понять, как ее исправить. У меня есть метод заказа для продукта, который вызывает веб-сервис, я анализирую ответ, и если ответ отрицательный, я должен показать AlertDialog внутри метода onPostExecute. Это код, я использую:Не удается показать Toast или AlertDialog в методе onPostExecute AsyncTask

private class test extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      // Creating service handler class instance 
      ServiceHandler sh = new ServiceHandler(); 

      // Making a request to url and getting response 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 


      params.add(new BasicNameValuePair("deviceOS", "Android")); 
      String jsonStr = sh.makeServiceCall(urlTest, ServiceHandler.POST, params); 


      if (jsonStr != null) { 
       try { 

        JSONObject obj = new JSONObject(jsonStr); 

        error = obj.getBoolean("Error"); 
        if(!error) 
        { 
         test = true; 
         JSONObject array = obj.getJSONObject("Response"); 

         token = array.getString("Token"); 

        } 
        else 
        { 
         test = false; 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } else { 

      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      //checkResult(); 
      AlertDialog.Builder reorder = new AlertDialog.Builder(myActivity.this); 
      reorder.setMessage("test"); 
      reorder.setCancelable(true); 
      reorder.setPositiveButton("ok", 
        new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.dismiss(); 
       } 
      }); 

      AlertDialog orderError = reorder.create(); 
      orderError.show(); 
     } 

    } 

Когда приложение достигает метода onPostExecute он выходит из строя, и бревно это:

07-13 11:58:31.074: E/AndroidRuntime(2529): FATAL EXCEPTION: main 
07-13 11:58:31.074: E/AndroidRuntime(2529): Process: com.test.Test, PID: 2529 
07-13 11:58:31.074: E/AndroidRuntime(2529): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:148) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:99) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:154) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:379) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at test.test$login.onPostExecute(test.java:575) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at test.test$test.onPostExecute(test.java:1) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.os.AsyncTask.finish(AsyncTask.java:632) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.os.Handler.dispatchMessage(Handler.java:102) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.os.Looper.loop(Looper.java:135) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at android.app.ActivityThread.main(ActivityThread.java:5312) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at java.lang.reflect.Method.invoke(Native Method) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at java.lang.reflect.Method.invoke(Method.java:372) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
07-13 11:58:31.074: E/AndroidRuntime(2529):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 

Кто-нибудь знает, что может быть ошибка?

+0

Где вы называете «тест»? –

+0

@MD внутри метода onPostExecute другого asyncTask – Signo

+0

Нет значения для слова «Активность» или «Фрагмент» –

ответ

0

Убедитесь, что вы инициализировали «urlTest» перед использованием.

+0

Приложение вылетает после того, как оно достигает метода onPostExecute, URL-адрес инициализируется и отлично работает – Signo

1

Почему вы создаете 2 раза AlertDialog? Используя Builder, вы можете его показать. Изменить код ниже и работает нормально. Заменить

AlertDialog.Builder reorder = new AlertDialog.Builder(myActivity.this); 

с

AlertDialog.Builder reorder = new AlertDialog.Builder(myActivity.this).create(); 

и
Удалить

AlertDialog orderError = reorder.create(); 
orderError.show(); 

и добавить

reorder.show(); 

Вот это .. .

+0

, он дает мне по-прежнему ту же ошибку, а также я не могу объявить AlertDialog.Builder = new AlertDialog.Builder, it дает ошибку, и он говорит, что я должен объявить переупорядочение как AlertDialog, без строителя – Signo

0

Попробуйте это.

private class test extends AsyncTask<Void, Void, Void> { 

    WeakReference<Activity> weakActivity; 

    public test(Activity activity) { 
     weakActivity = activity; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     //blah blah code! 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     Activity activity = weakActivity.get(); 
     if (activity != null) { 

      // Dismiss the progress dialog 
     //checkResult(); 
     AlertDialog.Builder reorder = new AlertDialog.Builder(activity); 
     reorder.setMessage("test"); 
     reorder.setCancelable(true); 
     reorder.setPositiveButton("ok", 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
      } 
     }); 

     AlertDialog orderError = reorder.create(); 
     orderError.show(); 
     } 
    } 

} 
Смежные вопросы