2015-03-25 5 views
0

Je construis une application android où il y a un écran d'accueil dans lequel onCreate j'initialise la tâche asynchrone. Dans cette tâche asynchrone, j'obtiens des données du serveur et montre en utilisant baseAdapter. Maintenant, le problème est lors de l'actualisation Je tire à nouveau la tâche asynchrone Et il duplique mes données Donc, je dois faire l'ancienne suppression de données et la nouvelle insertion de données dans la liste en utilisant BaseAdapter.Comment rendre JSONarray nul dans android?

Voici faire tâche Async -

/** 
* Async task class to get json by making HTTP call 
*/ 
private class questionfeed_async extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     ServiceHandler http = new ServiceHandler(); 
     jsonString = http.makeServiceCall(url, ServiceHandler.GET, 
       null); 
     if (jsonString != null) { 
      try { 
       SCROLL_TO_POSITION = currentQuestionArray.length(); 
       questions = new JSONArray(jsonString); 
       //result_text = new String[questions.length()]; 

       for (int i = 0; i < questions.length(); i++) { 
        temp_obj = questions.getJSONObject(i); 


        JSONObject currentQuestionObject = new JSONObject(); 

        currentQuestionObject.put("question_text", temp_obj.getString(Tag_questionText) 
          .toString()); 

        currentQuestionArray.put(currentQuestionObject); 

       } 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


     } else { 
      Log.d("TAG", "Empty"); 
     } 
     return null; 
    } 


    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 


      adapter = new BaseAdapterFeed(getActivity(), currentQuestionArray); 

      questionfeed_customelistview.setAdapter(adapter);    

     } catch (NullPointerException e) { 
      // probably don't bother doing clean up 
     } finally { 
      // carry on as if nothing went wrong 
     } 


    } 

Répondre

0

Je pense que le problème est dans « currentQuestionArray » .Vous devez créer chaque nouveau. Comme currentQuestionArray=new HashMap<String,String>() dans votre méthode doInBackground.Le problème est chaque fois qu'un nouveau currentQuestionObject est inséré dans la carte, mais l'ancien est également resté. J'espère que cela vous aide.

+0

pour répondre, mais THanks cela ne me aidera pas car il deviendra problème dans la pagination. J'ai donc rendu ce tableau vide. Rafraîchir –

+0

Pouvez-vous suggérer un moyen d'effacer l'ancien JSONArray et de l'initialiser à nouveau lors de l'actualisation. puis lancez ma tâche asynchrone –

+0

Tout ce que je sais est ----- Il suffit de créer un nouveau JSONArray. JSONArray otherJsonArray = new JSONArray(); Ou parcourez le tableau et supprimez (index int) les index. http://www.json.org/javadoc/org/json/JSONArray.html#remove(int) – Soham

0

Créer un nouvel adaptateur au cours de rafraîchissement, également nouveau tableau comme mentionné ci-dessus

+0

THanks c'est dose pas une bonne idée de faire nouveau baseadapter et nouveau tableau, pouvez-vous suggérer une autre façon de faire vieux suppression de données et chargement en magasin nouveau. –