2012-10-29 5 views
0

Lorsque j'utilise mon application qui se connecte à Internet, si l'application plante ou se tue après cela, je ne peux plus me connecter, je dois arrêter les applications-> mon application -> bouton stop pour me reconnecter . Lorsque le débogage suivant de l'application, mes messages de débogage arrivent à la fin de la méthode doInBackground, mais je connais cet appel de classe de tâche asynchrone à onPostExecute après la méthode doInbackground, dans mon exemple après avoir tué ou écrasé l'application ce n'est pas le cas.OnPostExecute méthode de Async Tâche non appelée

Quelqu'un peut-il m'aider avec ce problème?

private class doAuthentication extends AsyncTask<String, String, String> { 

    @Override 
    protected String doInBackground(String... params) { 



     Requester req = new Requester(); 
     String hash = req.loginByPIN(params[0]);//,VendingManagerActivity.this); 

     return hash; 
    } 

    @Override 
    protected void onPostExecute(String hash) { 
     Log.d("Vending","In post Ex-> "+hash); 
    // myProgressDialog.dismiss(); 


     if (hash.equals("")) { 

      final EditText kbdInput = (EditText) findViewById(R.id.kbdInput); 

      kbdInput.setText(""); 

      displayMessage(getString(R.string.err_wrong_credentials)); 
      return; 
     } else if (hash.equals("-")) { 

      final EditText kbdInput = (EditText) findViewById(R.id.kbdInput); 

      kbdInput.setText(""); 

      displayMessage(getString(R.string.err_no_permissions)); 
      return; 
     } else { 

      String[] resp = hash.split("#"); 


      Editor edit = mPrefs.edit(); 

      edit.putString("login_hash",resp[0]);// hash); 
      edit.putString("password",resp[1]);//lbp.reset_pass); 
      edit.commit(); 

      Intent mainScreenActivity = new Intent(
        VendingManagerActivity.this, MainScreenActivity.class); 

      startActivity(mainScreenActivity); 

      finish(); 
     } 
    } 
} 

classe Requester -> Méthode loginByPIN ->

public String loginByPIN(String pin_code) 
{ 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 
    nameValuePairs.add(new BasicNameValuePair("module", "tablet")); 
    nameValuePairs.add(new BasicNameValuePair("method", "loginByPin")); 
    nameValuePairs.add(new BasicNameValuePair("pin", pin_code)); 
    String xmlData = getRequest(API_ADDRESS, nameValuePairs); 

    String hash = ""; 
    String response = ""; 

    try { 

     Serializer serializer = new Persister();   

     Reader reader = new StringReader(xmlData); 
     LoginByPin lbp = 
      serializer.read(LoginByPin.class, reader, false); 

     hash = lbp.hash; 

     Requester.HASH = hash; 

     Log.d("Vending", "HASH received: " + hash); 

     response = hash +"#"+lbp.reset_pass; 



    } catch (Exception e) { 

     Log.d("Vending",e.getMessage().toString()); 
     Serializer serializer = new Persister();   

     Reader reader = new StringReader(xmlData); 

     try { 

      Error err = 
       serializer.read(Error.class, reader, false); 

      Integer errorCode = err.code; 
      String errorText = err.text; 

      Log.e("Vending", "ERROR: " + errorText + "(" + Integer.toString(errorCode) + ")"); 

      if (err.code == 200) 
       return "-"; 

     } catch (Exception e2) { 

      Log.e("Vending", "ERROR: Invalid output returned from API"); 

     } 

    } 
    Log.d("Vending","Before returning-> "+hash); 
    return response;//hash; 
} 

Merci!

Edit: pas modifier le code de cette manière

@Override 
    protected String doInBackground(String... params) { 



     Requester req = new Requester(); 
     String hash = req.loginByPIN(params[0]);//,VendingManagerActivity.this); 
     Log.d("Vending","Before doInBackground ends-> "+hash); 
     return hash; 
    } 

    @Override 
    protected void onPostExecute(String hash) { 
     Log.d("Vending","In post Ex-> "+hash); 
     myProgressDialog.dismiss(); 

et la sortie logcat est

10-29 10:26:06.278: D/Vending(25714): Before returning-> peq8qkjvee7v4nhci8v3dub293 
10-29 10:26:06.278: D/Vending(25714): Before doInBackground ends-> peq8qkjvee7v4nhci8v3dub293#qwerty123 
+0

où est l'erreur logcat? –

+0

vous devriez probablement définir un délai d'attente pour votre connexion – thepoosh

+0

assurez-vous que votre doInBackGround() s'exécute sans erreur. – URAndroid

Répondre

1

Si votre application se bloque pendant doInBackground() est exécuté, alors onPostExecute() ne seront pas appelés.

onPostExecute() est seulement appelée après la réussite de la méthode doInBackground().

+0

Méthode doInBackGround execute à renvoyer .. après ce stop, n'appelle pas la méthode onPostExecute – user1106234