Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Actualiser un ListView via un AsyncTask

    14 mars 2013 à 12:30:22

    Bonjour,

    J'essai de passer par un AsyncTask pour actualiser mon application, mais ça ne marche tout simplement pas et malgré plusieurs heures de recherches, je ne vois toujours pas le problème... (l'application ne plante pas, mais ne semble pas se connecter à la base de données).

    Pourtant, l'actualisation en utilisant les même fonction sans passer par l'AsyncTask se passe sans problème...

    Voici le code du asynctask :

    private class GetDataTask extends AsyncTask<Void, Void, ArrayList<Match_ItemDetails>> {
    		ArrayList<Match_ItemDetails> tableau;
    		
            @Override
            protected ArrayList<Match_ItemDetails> doInBackground(Void... params) {
            		Log.i(MainActivity.class.getName(),"doinBackground");
                    tableau =GetSearchResults();
                return tableau;
            }
    
            @Override
            protected void onPostExecute(ArrayList<Match_ItemDetails> result) {
            		setRefresh(result);
                    lv1.onRefreshComplete();
    
            }
        }

    la classe GetDataTask :

     private ArrayList<Match_ItemDetails> GetSearchResults(){
    	  
    	  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    	  StrictMode.setThreadPolicy(policy); 
    	  
    	  String lireResultats = lireResultats();
    	  
    	  try {
    	      JSONArray jsonArray = new JSONArray(lireResultats);
    	      Log.i(MainActivity.class.getName(),
    	          "Number of entries " + jsonArray.length());
    	      for (int i = 0; i < jsonArray.length(); i++) {
    	        JSONObject jsonObject = jsonArray.getJSONObject(i);
    	        Match_ItemDetails item_details = new Match_ItemDetails();
    	        item_details.setNameTeam1(jsonObject.getString("equipe1"));
    	        item_details.setNameTeam2(jsonObject.getString("equipe2"));
    	        item_details.setDate(jsonObject.getString("date"));
    	        item_details.setScoreTeam1(jsonObject.getInt("scoreEquipe1"));
    	        item_details.setScoreTeam2(jsonObject.getInt("scoreEquipe2"));
    	        item_details.setEstFini(jsonObject.getInt("estFini"));
    	        item_details.setDrapeauEquipe1(jsonObject.getString("drapeauEquipe1"));
    	        item_details.setDrapeauEquipe2(jsonObject.getString("drapeauEquipe2"));
    	        if (!existe(item_details.getDrapeauEquipe1())){
    	        	enregistrer(item_details.getDrapeauEquipe2());	        	
    	        }
    	        if (!existe(item_details.getDrapeauEquipe2())){
    	        	enregistrer(item_details.getDrapeauEquipe2());
    	        }
    	        item_details.setDrapeau1(getImage(item_details.getDrapeauEquipe1()));
    	        item_details.setDrapeau2(getImage(item_details.getDrapeauEquipe2()));
    	        
    	        results.add(item_details);
    	      }
    	    } catch (Exception e) {
    	      e.printStackTrace();
    	    }
    	  
    	  return results;
      }
      
      public String lireResultats() {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("adresse de la page");
        try {
          HttpResponse response = client.execute(httpGet);
          StatusLine statusLine = response.getStatusLine();
          int statusCode = statusLine.getStatusCode();
          if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
              builder.append(line);
            }
          } else {
            Log.e(MainActivity.class.toString(), "Failed to download file");
          }
        } catch (ClientProtocolException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        return builder.toString();
      }

    et le setRefresh :

     private void setRefresh(ArrayList<Match_ItemDetails> arrayList){
    	  lv1.setAdapter(adapter);
    	  adapter.notifyDataSetChanged();
      }

    Sachant que lv1 est ma ListView

    Et que la fonction setRefresh(GetDataTask()) marche sans problème...

    Merci de votre aide



    • Partager sur Facebook
    • Partager sur Twitter

    [Android] Actualiser un ListView via un AsyncTask

    × 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