2013-08-17 6 views
-1

Я пытаюсь извлечь данные из базы данных (набор контактов) на веб-сервере и попытаться показать данные с помощью ListViews. Всякий раз, когда я запускаю свое приложение, каждый раз он добавляет тот же список в список. Изображение будет объяснить это лучше:Тот же элемент списка добавлен каждый раз, когда приложение запускается

enter image description here

Это первый раз, когда я бегу мое приложение (После того, как я его установки). Теперь я выхожу из своего приложения и запускаю его снова. Результат: enter image description here

Вот код моего приложения:

RegisterMe reg=connect.new RegisterMe(); //RegisterMe is an asynchronous task used 
    reg.execute(myPhoneNumber); // to receive data. execute() fxn is called 
           // which invokes doInBackground() fxn. 
    /*try{ 
     Thread.sleep(3000); 
    }catch(Exception e) 
    { 
     System.out.println(e.toString()); 
    } */ 


     adapter=new SimpleAdapter(this,mutualFriends,R.layout.activity_first,new String[]{KEY_NAME,KEY_NUMBER} 
           ,new int[]{R.id.text1,R.id.text2}); 
    setListAdapter(adapter); 

Код для doInBackground() выглядит следующим образом:

protected class RegisterMe extends AsyncTask<String,Void,String> 
{ 
protected String doInBackground(String... str) 
{ 
     String myPhoneNumber; 
     myPhoneNumber=str[0]; 
     InputStream is = null; 
     String result=new String(); 
     HttpClient httpclient=new DefaultHttpClient(); 
     HttpPost httppost=new HttpPost("http://johnconnor.comuf.com/register.php"); 
     try 
     { 
      List<NameValuePair> nameValuePairs=new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("mynumber",myPhoneNumber)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response= httpclient.execute(httppost); 
      Log.i("postData",response.getStatusLine().toString()); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     }catch (ClientProtocolException e) { 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
     } catch (IOException e) { 
      } 
     try { 
      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 (Exception e) { 
     } 

     result=result.substring(0,result.indexOf('\n')); 
     return result ; //result contains "Neeraj,"123456789" 
} 

Код для onPostExecute выглядит следующим образом:

protected void onPostExecute(String result) 
{ 

    String[] array; 
    array=result.split("[/]"); 

    HashMap<String,String> map=new HashMap<String,String>(); 
    for(int i=0;i<array.length-1;i++) 
    { 
     String[] singleContact; 
     singleContact=array[i].split("[,]"); 
     map.put(FirstActivity.KEY_NAME,singleContact[0]); 
     map.put(FirstActivity.KEY_NUMBER, singleContact[1]); 
     FirstActivity.mutualFriends.add(map); 
    } 
    FirstActivity.adapter.notifyDataSetChanged(); 
} 

Я проверил использование отладчика, результат которого содержит только «Neeraj, 123456789». Но каждый раз, когда я запускаю свое приложение, добавляется тот же элемент списка. Все, что я хочу, это отобразить его только один раз. Может кто-нибудь здесь, пожалуйста?

Спасибо,

+0

Если 'взаимные друзья 'является статической переменной, ее можно поддерживать дольше, чем вы хотели. Вам необходимо очистить этот список перед запуском задачи async. –

ответ

0

Я подозреваю, что это из-за

FirstActivity.mutualFriends.add(map); 

Вы добавляете новую запись с помощью этого. Поэтому при первом запуске приложения есть только одна запись. Второй раз, когда вы начинаете, их два.

Предполагая, что mutualFriends вы используете Arraylist. Попробуйте добавить

FirstActivity.mutualFriends.clear(); 

перед добавлением новой записи.

0

Одно решения убедитесь, что ваш массив быть ясно или

всегда делают нулевую ArrayList перед добавлением данных

или последний конца когда-либо использовал для больших данных хранить ваши данные, чтобы SQLite и получить данные из этого перед добавлением данных в sqlite, удалите все записи из db и снова заполните, чтобы он не отображал вам повторяющиеся данные.

Смежные вопросы