2017-02-19 15 views
0

Извините, что знаю, что этот вопрос задан несколько раз и имеет много ответов, но ни одна из них не решила мою проблему. Я вызываю веб-сервис и показываю диалог, который работает нормально. Но я не могу уволить progressDialog. Хотя тот же метод работает внутри фрагмента, но на этот раз я использую его в Activity. Пожалуйста, укажите мне, где я делаю ошибку.не удалось удалить progressDialog внутри Activity

public void signupServiceResponse(String phNum,String password){ 
    progressDialog = createProgressDialog(this, false); 
    //progressDialog.show(); 
    final ContentServiceCall request = ServiceGenerator.createService(ContentServiceCall.class, "Empty"); 
    final Call<UserServiceResponse> call = request.signUp(Constants.WS_VERSION,Constants.LOCAL_EN,Constants.PLATFORM, phNum,password); 

    call.enqueue(new Callback<UserServiceResponse>() { 
     @Override 
     public void onResponse(Call<UserServiceResponse> call, final Response<UserServiceResponse> response) { 
      if(response!=null && response.isSuccessful()) 
      { 
       if(response.body()!=null && response.body().getResponse()!=null) 
       { 
        if(response.body().getResponse().getResponseCode()== Constants.RESPONSE_CODE_SUCCESS) { 

         if(response.body().getUser() != null && response.body().getUserSubscription()!= null && response.body().getUserSubscription() !=null) { 

          userEntity = response.body().getUser(); 
          userProfileEntity = response.body().getUserProfile(); 
          userSubscriptionEntity = response.body().getUserSubscription(); 
          //insert in user table 
          int tableCode = 1; //table code 1 for user table 
          dbHelper.insertUserRegistration(userEntity, userProfileEntity, userSubscriptionEntity, tableCode); 
          dbHelper.close(); 
          progressDialog.dismiss(); 
          Intent i = new Intent(RegistrationActivity.this, ActivateAccountActivity.class); 
          startActivity(i); 
         } 

        } else if((response.body().getResponse().getResponseCode()== Constants.USERAlREADYEXIST_RESPONSE_CODE_SUCCESS)) { 
         // in case user data is cleared or app is reinstalled 
         boolean userCount = dbHelper.getUserCount(); 
         if (userCount) { 
          Intent i = new Intent(RegistrationActivity.this, MainActivity.class); 
          startActivity(i); 

         } else if(!userCount){ 
          // if user exist and data is cleared 
          userEntity = response.body().getUser(); 
          userProfileEntity = response.body().getUserProfile(); 
          userSubscriptionEntity = response.body().getUserSubscription(); 
          int tableCode = 1; 
          dbHelper.insertUserRegistration(userEntity, userProfileEntity, userSubscriptionEntity, tableCode); 
          dbHelper.close(); 
         } 

        } else if((response.body().getResponse().getResponseCode()== Constants.RESPONSE_CODE_PASSWORD_INCORRECT)){ 
         Toast.makeText(RegistrationActivity.this,"Password incorrect",Toast.LENGTH_LONG).show(); 
         btnForgetPassword.setVisibility(View.VISIBLE); 
         progressDialog.dismiss(); 
        } 

        else { 
        } 
       } 
       else { 
        // leave it 
       } 
      } 
      else 
      { 
       // Display proper message 
       //Toast.makeText(getActivity(),getString(R.string.error_webservice_response),Toast.LENGTH_LONG).show(); 
      } 
      progressDialog.dismiss(); 
     } 

     @Override 
     public void onFailure(Call<UserServiceResponse> call, Throwable t) { 

      Log.e("Fail", "Failure"); 
      Log.e("ERROR", t.getMessage()); 
       progressDialog.dismiss(); 
       Toast.makeText(RegistrationActivity.this,getString(R.string.error_internet_connectivity),Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

public ProgressDialog createProgressDialog(Context mContext, Boolean cancelable) { 
    final ProgressDialog dialog = new ProgressDialog(mContext); 
    try { 
     dialog.show(); 
    } catch (WindowManager.BadTokenException e) { 

    } 
    dialog.setCancelable(cancelable); 
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    dialog.setContentView(R.layout.dialog); 

    return dialog; 
} 
+1

Обычно это происходит потому, что 'progressDialog' больше не указывает на экземпляр, который, как вы думаете, он делает при вызове' reject() '. Вместо поля класса для 'progressDialog', make' final ProgressDialog progressDialog = ... 'прямо там в' signupServiceResponse() '. Кроме того, убедитесь, что на самом деле у вас нет нескольких видимых экземпляров. То есть, убедитесь, что вы не случайно вызываете 'signupServiceResponse()' более одного раза. –

+0

только вызов signupServiceResponse() один раз. и я объявлял progressDialog глобально подобным образом. ProgressDialog progressDialog = null. Должен ли я удалить это? – Andrain

+0

Ваша переменная 'progressDialog' ссылается на' ProgressDialog', возвращаемый методом 'createProgressDialog', а не' android.app.ProgressDialog'. Именно по этой причине ваши методы reject() не работают. –

ответ

1

Сделайте свою dialog глобальной переменной и инициализируйте ее в onCreate() (Если вы находитесь внутри Activity).

dialog = new ProgressDialog(mContext); 

Добавить этот метод.

public ProgressDialog dismiss() { 
    if(dialog != null) { 
     dialog.dismiss(); 
    } 
} 

Наконец, вместо вызова progressDialog.dismiss() просто позвонить dismiss().

0

Вы должны проверить/написать вот так.

если (progressDialog! = NULL & & progressDialog.isshowing) {

progressDialog.dismiss(); 

}

Я использую, и она работает.

+0

Уже пробовал это условие, но он также не работал – Andrain

+0

Проверьте, как это – maulik