2016-10-27 3 views
0

Я работаю над проектом каталога, который может делать CRUD. На каждом процессе CRUD он показывает ProgressDialog.Продвинутый диалог не разрешен

Проблема заключается в том, что «Обновление каталога данных» не отменяется и запускается вечно до тех пор, пока MJ не забудет о рэпе. Я не понимаю, почему. Пожалуйста, помогите

Код

public void updateProduct(final String id, final String name, final String price, final String category, final String description, @Nullable String imageBase64) { 
    Log.i("zihad", "updateProduct()"); 
    progressDialog = ProgressDialog.show(context, "Update data catalog", "Please wait ..."); 
    StringRequest myStringRequest = new StringRequest(Request.Method.POST, MainActivity.URL_SERVER+"/updateproduct.php", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String jsonResponse) { 
        progressDialog.dismiss(); 
        Log.i("zihad", "updateProduct().onResponse()"); 
        try { 
         JSONObject jObject = new JSONObject(jsonResponse); 
         if (jObject.getBoolean("success")) { 
          Toast.makeText(context, "Product has been updated", Toast.LENGTH_SHORT).show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      myDefaultErrorListener) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> mapParam = new HashMap<>(); 
      mapParam.put("id", id); 
      mapParam.put("name", name); 
      mapParam.put("price", price); 
      mapParam.put("category", category); 
      mapParam.put("description", description); 

      return mapParam; 
     } 
    }; 
    requestQueue.add(myStringRequest); 

    if (imageBase64 != null) {uploadImageProduct(id, imageBase64);} 
} 

public void uploadImageProduct(final String id, final String imageBase64) { 
    Log.i("zihad", "uploadImageProduct()"); 
    progressDialog = ProgressDialog.show(context, "Upload image catalog", "Please wait ..."); 
    StringRequest myStringRequest = new StringRequest(Request.Method.POST, MainActivity.URL_SERVER+"/uploadimage.php", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String jsonResponse) { 
        Log.i("zihad", "uploadImageProduct().onResponse()"); 
        progressDialog.dismiss(); 
       } 
      }, 
      myDefaultErrorListener) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> mapParam = new HashMap<>(); 
      mapParam.put("id", id); 
      mapParam.put("imageBase64", imageBase64); 

      return mapParam; 
     } 
    }; 
    requestQueue.add(myStringRequest); 
} 

Log Скриншот enter image description here

+0

попробуйте использовать 'progressDialog.cancel();' вместо –

+4

Вы используете ту же переменную - progressDialog' - для двух разных экземпляров 'ProgressDialog', и они смешиваются. Следуйте своему журналу вместе с кодом. После запуска 'uploadImageProduct()' 'progressDialog' относится к экземпляру« Загрузить каталог изображений ». –

+0

@MikeM. правильный ответ – Fndroid

ответ

0

попытаться установить свой диалог прогресса в детерминированной. В коде после

progressDialog = ProgressDialog.show(context, "Update data catalog", "Please wait ..."); 

добавить эту строку:

progressDialog.setIndeterminate(false); 
0
public static ProgressDialog show(Context context, CharSequence title, 
     CharSequence message, boolean indeterminate, 
     boolean cancelable, OnCancelListener cancelListener) { 
    ProgressDialog dialog = new ProgressDialog(context); 
    dialog.setTitle(title); 
    dialog.setMessage(message); 
    dialog.setIndeterminate(indeterminate); 
    dialog.setCancelable(cancelable); 
    dialog.setOnCancelListener(cancelListener); 
    dialog.show(); // show the dialog 
    return dialog; 
} 

Метод обратного вызова onResponse не будет звонить, пока их не является ответом с сервера.

шоу() метод будет создавать и показать диалоговое окно для вас, так что если вы вызвать этот метод дважды, не отвергая первый, первый не уволит навсегда, потому что не будет использоваться ссылка этого диалога ,

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