Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation AsyncTask

Problème avec le return

    4 juillet 2019 à 15:08:31

    Bonjour,

    Je suis en train de créer ma première application mobile qui me permet de me connecter a une base de donnée extérieure. J'ai réussi cette partie par l'intermédiaire de AsyncTask. J'ai défini cette classe a l'intérieur de ma classe MainActivity (oui c'est bizarre mais ça marche, le problème ne vient pas de là), cependant lorsque j'utilise doInBackground, je suis forcé de mettre un return à la fin qui arrête tous mon programme, sans arriver jusqu'à mon "intent". 

    J'ai cherché une solution sur internet mais je n'ai pas trouvé malgré plusieurs recherches, et je voulais savoir si vous auriez une solution a me proposer.

    Merci d'avance et désolé du dérangement.

    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.AsyncTask;
    import android.os.Bundle;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.StrictMode;
    import android.util.Log;
    import android.view.View.OnClickListener;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    
    public final class MainActivity extends AppCompatActivity {
    
        Button connection = null;
        EditText carte = null;
        TextView result = null;
        Button button = null;
        int a;
        String b;
        String c;
        String d;
        double e;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.d("log_tag","cest_parti");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            result = (TextView) findViewById(R.id.result);
            connection = (Button) findViewById(R.id.connection);
            carte = (EditText) findViewById(R.id.Numcarte);
            button = (Button) findViewById(R.id.button);
            connection.setOnClickListener(connectionListener);
            button.setOnClickListener(buttonListener);
            c = carte.getText().toString();
            Log.d("log_tag","val c " + c );
    
            Connexion connexion = new Connexion();
            connexion.execute(carte.getText().toString());
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            Log.d("log_tag","ptnn"+a);
    
    
        }
    
    
        private OnClickListener connectionListener = new OnClickListener() {
            @Override
            public void onClick(View v) {
                float cValue = Float.valueOf(c);
                Log.d("log_tag","enfin"+a);
    //Ici on mettra la condition si le numero de carte est bon
                if (cValue == 0)
                    Toast.makeText(MainActivity.this, "Gros naze il est faux ton code de carte mdr", Toast.LENGTH_SHORT).show();
                else {
                    Intent thuneActivityIntent = new Intent(MainActivity.this, ThuneActivity.class);
                    thuneActivityIntent.putExtra("num_carte",a);
                    thuneActivityIntent.putExtra("nom",b);
                    thuneActivityIntent.putExtra("prenom",d);
                    thuneActivityIntent.putExtra("note",e);
                    startActivity(thuneActivityIntent);
                }
    
            }
        };
        private OnClickListener buttonListener = new OnClickListener() {
            @Override
            public void onClick(View view) {
                MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.geranium);
                mp.start();
                setContentView(R.layout.numerobis);
            }
        };
    
        class Connexion extends AsyncTask<String,String,String> {
    
            public String doInBackground(String... message) {
                Log.d("log_tag","cest_parti"+ c);
                String result = "";
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
                nameValuePairs.add(new BasicNameValuePair("numero_carte", "182136330"));
    
    
    // Envoi de la requête avec HTTPPost
                try {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("monURL");
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    InputStream is = entity.getContent();
    
    
    //Conversion de la réponse en chaine
    
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "ISO-8859-1"), 8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    is.close();
    
                    result = sb.toString();
    
                } catch (UnsupportedEncodingException e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                } catch (ClientProtocolException e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                } catch (IOException e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                } catch (IllegalStateException e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                }
    
    // Parsing des données JSON
                try {
                    JSONArray jArray = new JSONArray(result);
    
                    for (int i = 0; i < jArray.length(); i++) {
                        JSONObject json_data = jArray.getJSONObject(i);
                        Log.i("log_tag", "numero_carte " + json_data.getInt("numero_carte") +
                                ", nom: " + json_data.getString("nom") +
                                ", prenom " + json_data.getString("prenom") +
                                ", note " + json_data.getDouble("note")
                        );
                        a=json_data.getInt("numero_carte");
                        b=json_data.getString("nom");
                        d=json_data.getString("prenom");
                        e= json_data.getDouble("note");
                    }
                } catch (
                        JSONException e) {
                    Log.e("log_tag", "Error parsing data " + e.toString());
                }
                Log.d("log_tag","fin programme 1 et valeur de num carte "+a);
                return null;
    
            }
        }
    
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2019 à 1:51:53

      Salut , il faut traiter la requete avec la methode overide protected void onPostExecute(Long result)

      Sinon ça ne marchera pas 

      -
      Edité par Kediath 7 juillet 2019 à 14:02:09

      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2019 à 23:37:53

        Merci de votre réponse Kediath.

        Cela veut donc dire que je dois mettre mon "Connexion connexion = new connection()" dans le fonction OnPostExecute? Et qu'est-ce-qu'un argument long result ? Je vous demande cela afin de comprendre ce que je vais faire si j'en ai besoin plus tard.

        Merci encore

        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2019 à 20:41:37

          Non, ma methode onPostExecute sera appelé à chaque fois qu'une requete sera terminé , c'est à dire que c'est ici que tu devras traiter ton json_data, par contre il ne devra pas être local.

          Tu peux ignorer le Long result tu n'en as surement pas besoin

          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2019 à 21:09:19

            Donc si je comprends bien je place dans ma classe connexion le onPostExecute à la suite de mon doInBackground et ma classe MainActivity va récupérer le résultat de AsyncTask sans s'interrompre à cause du return qu'il contient?
            • Partager sur Facebook
            • Partager sur Twitter
              12 juillet 2019 à 22:40:30

              Le return n'interrompt rien il est à la fin de ton thread

              Je pense que tu devrais revoir les bases de java ça t'aidera beaucoup

              -
              Edité par Kediath 13 juillet 2019 à 0:56:17

              • Partager sur Facebook
              • Partager sur Twitter

              Utilisation AsyncTask

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown