2017-02-19 1 views
0

Sorry, ich weiß, dass diese Frage wurde mehrmals gestellt und hat viele Antworten, aber keine von ihnen löste mein Problem. Ich rufe Web-Service an und zeige einen Dialog, der funktioniert. Aber ich kann den progressDialog nicht abweisen. Obwohl die gleiche Methode innerhalb des Fragments funktioniert, verwende ich dieses Mal in Activity. Bitte zeigen Sie mir, wo ich den Fehler mache.kann progress nicht abbrechenDialog in Aktivität

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

Dies ist normalerweise, weil 'progressDialog' nicht mehr auf die Instanz verweist, die Sie denken, wenn 'follow()' aufgerufen wird. Statt eines Klassenfeldes für 'progressDialog' sollte' final ProgressDialog progressDialog = ... 'genau dort in' signupServiceResponse() 'gemacht werden. Stellen Sie außerdem sicher, dass Sie nicht tatsächlich mit mehreren sichtbaren Instanzen enden. Das heißt, stellen Sie sicher, dass Sie "signupServiceResponse()" nicht versehentlich mehrmals aufrufen. –

+0

nur einmal signupServiceResponse() aufrufen. und ich habe global progressDialog so deklariert. ProgressDialog progressDialog = null. Soll ich das entfernen? – Andrain

+0

Ihre Variable 'progressDialog' bezieht sich auf den' ProgressDialog', der von der Methode 'createProgressDialog' und nicht' android.app.ProgressDialog' zurückgegeben wird. Dies ist der Grund, warum Ihre Methoden ablehnen() nicht funktionieren. –

Antwort

1

Machen Sie Ihre dialog eine globale Variable und initialisieren Sie sie in der onCreate() (Wenn Sie in einer Aktivität sind).

dialog = new ProgressDialog(mContext); 

Fügen Sie diese Methode hinzu.

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

Schließlich statt progressDialog.dismiss() einfach dismiss() rufen zu nennen.

0

Sie müssen überprüfen/schreiben wie folgt.

if (progressDialog! = Null & & progressDialog.isshowing) {

progressDialog.dismiss(); 

}

ich verwende und es funktioniert.

+0

Bereits versucht, diese Bedingung, aber es hat auch nicht funktioniert – Andrain

+0

Check wie folgt – maulik