Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chainez 2 requêtes JSON

    2 mars 2021 à 16:59:27

    Bonjour,

    Je ne sais pas si j'utilise les bons termes mais j'essaye sans succès de chainer 2 requêtes JSON pour qu'elles s'exécutent l'une après l'autres (la deuxième doit s'exécuter une fois que la première est terminée.

    J'ai actuellement dans mon code 2 méthodes GetUserInfoServer() et GetLocation().

    La méthode GetLocation() me permet d'obtenir un id_lieu et un nom_de_ lieu correspondant. Cette méthode me fourni une ArrayList avec l'id et le nom du lieu.

    La méthode GetUserInfoServer() me permet d'obtenir le Nom, prénom et id_lieu de l'utilisateur. Dans cette méthode je fais aussi la comparaison avec l'id_lieu de la liste obtenue dans la méthode GetLocation().

    Du coup, je dois obtenir la liste de GetLocation avant que la méthode GetUserInfoServer() ne s'exécute.
    Voici ce que j'ai fais pour l'instant (c'est surement pas très propre mais je suis débutant) :

    public class UserActivity extends AppCompatActivity {
    
        // Pour créer du Log
        private static final String TAG = "ItemsRecyclerViewActivity";
    
        // Déclaration des variables
        String tokensession;
    
        private ArrayList<String> listdatauser = new ArrayList<>();
        private ArrayList<String> listuserlastname = new ArrayList<>();
        private ArrayList<String> listuserfirstname = new ArrayList<>();
        private ArrayList<String> listuserlocation = new ArrayList<>();
        private ArrayList<String> listlieux = new ArrayList<>();
        private ArrayList<String> listemail = new ArrayList<>();
        private ArrayList<String> listlieuxname = new ArrayList<>();
        private ArrayList<String> listlieuxid = new ArrayList<>();
        String lieuxname;
        String User_id;
        String User_email;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.items_recyclerview);
            Log.d(TAG, "onCreate: Started.");
    
            // Récupération du Session Token
            tokensession = getIntent().getStringExtra("TokenSession");
            Log.d("Token", tokensession);
    
            // Appel de la fonction pour récupérer les infos de lieu
            GetLocation();
    
    // Appel de la fonction pour récupérer les infos Users du serveur
            GetUsersInfoServer();
    
    
        }
    
        
        private void initRecyclerView() {
           
            RecyclerView recyclerView = findViewById(R.id.itemsrecyclerview);
            UserAdapter adapter = new UserAdapter(this, listuserlastname, listuserfirstname, listuserlocation, listemail);
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
        }
    
    
        // Création de la Fonction pour récupérer les infos Users du serveur
        public void GetUsersInfoServer() {
    
            // Récupération de la liste des Users
            String url = "https://hostname/User/?Content-Type=application/json&range=0-1000&expand_drodpowns=true&session_token=" + tokensession;
    
            RequestQueue requestQueue = Volley.newRequestQueue(UserActivity.this);
    
            // Lancement de la commande GET pour récupérer les infos Users
            JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
    
                @RequiresApi(api = Build.VERSION_CODES.N)
                @SuppressLint("ResourceType")
                @Override
                public void onResponse(JSONArray response) {
    
                    try {
    
                        // vidage de la liste pour partir sur une liste vide
                        listdatauser.clear();
                        listuserlastname.clear();
                        listuserfirstname.clear();
                        listuserlocation.clear();
    
                        // Initialisation d'une boucle pour parcourir tous les éléments
                        for (int i = 0; i < response.length(); i++) {
    
                            //Récupération dans JsonObject de l'élément en cours
                            JSONObject jsonObject = response.getJSONObject(i);
    
                            // Récupération des valeurs de chaque objet de la réponse, puis stockage dans variable
                            User_id = jsonObject.getString("id");
                            String Userlastname = jsonObject.getString("realname");
                            String Userfirstname = jsonObject.getString("firstname");
                            String User_lieu_id = jsonObject.getString("locations_id");
    
                           
                            // Récupération du nom du lieu en fonction du User_lieu_id
    
                            if (listlieux.contains(User_lieu_id)) {  
    
                                        int index = listlieux.indexOf(User_lieu_id); // Mettre dans Index la position de l'élément
                                        System.out.println("L'élément se trouve à : " + index);
                                        int Positionlieux = index + 2; 
                                        lieuxname = listlieux.get(Positionlieux); 
    
                                    }
    
                            else // Traitement des users n'ayant pas de lieux. Je leur affecte la valeur "Vide"
                            {
                                lieuxname = "Vide";
                            }
    
                            
                            // Ajout des valeurs dans la liste : listdata
                            listdatauser.add(User_id);
                            listdatauser.add(Userlastname);
                            listdatauser.add(Userfirstname);
                            listdatauser.add(lieuxname);
    
                            // Création de 2 listes distinctes pour les noms et prénom afin de pouvoir les envoyer à UserActivity
                            listuserlastname.add(Userlastname);
                            listuserfirstname.add(Userfirstname);
                            listuserlocation.add(lieuxname);
    
                            
                                    // Appel de la fonction initRecyclerView
                                    initRecyclerView();
    
                        }
    
    
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("error", error.toString());
                }
            });
    
            requestQueue.add(request);
    
        }
    
        public void GetLocation(){
    
    
            // Récupération de la liste des lieux
            String urllocation = "https://hostname/Location/?expand_drodpowns=true&session_token=" + tokensession;
    
            RequestQueue requestQueue2 = Volley.newRequestQueue(UserActivity.this);
    
            // Lancement de la commande GET pour récupérer les différents Lieux
            JsonArrayRequest request2 = new JsonArrayRequest(Request.Method.GET,urllocation,null, new Response.Listener<JSONArray>() {
                @SuppressLint("ResourceType")
                @Override
                public void onResponse(JSONArray response) {
    
                    try {
    
                        // vidage de la liste pour partir sur une liste vide
                        listlieux.clear();
                        listlieuxid.clear();
                        listlieuxname.clear();
    
                        // Initialisation d'une boucle pour parcourir tous les éléments
                        for (int i = 0; i < response.length(); i++) {
    
    
                            //Récupération dans JsonObject de l'élément en cours
                            JSONObject jsonObject = response.getJSONObject(i);
    
                            // Récupération des valeurs de chaque objet de la réponse, puis stockage dans variable
                            String lieux_id = jsonObject.getString("id");
                            String lieux_name = jsonObject.getString("name");
                            String lieux_completename = jsonObject.getString("completename");
                            String lieux_idbis = jsonObject.getString("locations_id");
                            String lieux_adresse = jsonObject.getString("comment");
    
                            listlieux.add(lieux_id);
                            listlieux.add(lieux_name);
                            listlieux.add(lieux_completename);
    
                            listlieuxid.add(lieux_id);
                            listlieuxname.add(lieux_name);
    
                        }
    
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("error", error.toString());
                }
            });
    
            requestQueue2.add(request2);
    
        }
    
    }



    • Partager sur Facebook
    • Partager sur Twitter

    Chainez 2 requêtes JSON

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown