2017-03-22 7 views
0

Meine Listview-Daten werden dupliziert, wenn ich eine Aktivität neu lade oder zu einer verwandten Aktivität zurückwechsle. Wenn ich mich jedoch nach der Anmeldung bei der Anwendung anmelde, bleiben eindeutige Daten erhalten.So zeigen Sie eindeutige Daten in der Listenansicht android an

Wenn ich meinen Code debuggen, merke ich, dass der Cursor der Datenbank vorherige Werte behält. Wie löst man das?

hier ist mein Code:

public void setadapter() { 
    boolean checkFirstTime = false; 

    Log.e("Set Adapter call>>>>>", "called"); 
    HashMap<String, String> map; 

    Database1 db = new Database1(getActivity()); 
    Cursor cursor = db.getWritableDatabase().query("timelinedata", null, null, null, null, null, null); 
    System.out.println("Size of Cursor" + cursor.getCount()); 
    TImelineTask.contactList.clear(); 
    TImelineTask.contactList = new ArrayList<>(); 

    while (cursor.moveToNext()) { 

     map = new HashMap<>(); 

     map.put("id", cursor.getString(0)); 
     map.put("sms", cursor.getString(1)); 
     map.put("phoneno", cursor.getString(2)); 
     map.put("date_time", cursor.getString(3)); 
     map.put("type", cursor.getString(4)); 
     map.put("source", cursor.getString(5) + " "); 
     map.put("imagepath", cursor.getString(6)); 
     map.put("imageadd", cursor.getString(7) + ""); 
     map.put("issue_type", cursor.getString(8) + ""); 
     map.put("issue_select_type", cursor.getString(9)); 
     map.put("issuetype", cursor.getString(9)); 
     map.put("date", cursor.getString(10)); 
     map.put("time", cursor.getString(11)); 

     if (getActivity().getIntent().getStringExtra("caseid").equalsIgnoreCase(cursor.getString(13))) { 

      TImelineTask.contactList.add(map); 
     } 


    } 
    if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
    } 
    db.close(); 
    if (checkFirstTime) { 
     if (TImelineTask.contactList.size() > 0) { 
      TImelineTask.contactList.clear(); 
     } 
    } 


    final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    for (int i = 0; i < TImelineTask.contactList.size() - 1; i++) { 
     try { 
      Date date1 = sdf.parse(TImelineTask.contactList.get(i).get("date_time")); 
      swappos = i; 
      for (int j = i + 1; j < TImelineTask.contactList.size(); j++) { 
       Date date2 = sdf.parse(TImelineTask.contactList.get(j).get("date_time")); 

       if (date1.compareTo(date2) < 0) { 

        Collections.swap(TImelineTask.contactList, swappos, j); 
        date1 = date2; 

       } 
      } 
     } catch (Exception e) { 

      e.printStackTrace(); 
     } 

    } 
    Log.e("Adapter ", "calling"); 
    System.out.println("Adapter Size" + TImelineTask.contactList.size()); 
    listadapter = new ListAdapterClass(TImelineTask.contactList, getActivity(), this); 


    listview.setAdapter(listadapter); 
    listadapter.notifyDataSetChanged(); 
    if (listadapter.isEmpty()) { 
     noentry.setVisibility(View.VISIBLE); 
     listadapter.notifyDataSetChanged(); 
    } else { 
     listadapter.notifyDataSetChanged(); 
     noentry.setVisibility(View.GONE); 
    } 

    new MyTimerTask().execute(); 
    checkFirstTime = true; 
} 
+1

Löschen Sie Ihre Liste, bevor Sie Daten in der Liste hinzugefügt haben. – Piyush

+0

@Piyush Ich habe es versucht, aber nichts passiert. – MonicaGPH

+0

Gibt es doppelte Daten in Ihrer Datenbank? – fangxing

Antwort

0

Sie können OnPause() überschreiben oder OnStart() -Methode der Aktivität für die Liste zu löschen.

über Lebenszyklus eines Read

0

ich meinen Fehler ..Actually Datenbank-Cursor gefangen vorherigen Wert bekommen, damit es Daten repliziert.

Verwandte Themen