2012-03-28 10 views
0

Ich habe versucht, eine Lösung für mein Problem bereits in Google und hier auf stackoverflow, aber nichts konnte meine Frage zu beantworten. Ich verwende eine SQLite-Datenbank, um eine Listenansicht zu füllen. Oben auf der Listenansicht befindet sich auch ein Tabhost, wo man zu einer anderen Aktivität wechseln kann. Beim Wechsel zu dieser Aktivität und dann zurück zur Listview wird ein Leck gefunden. Wie auch immer es aussieht, es gibt anscheinend ein Leck. Kann mir jemand helfen, dieses Leck zu finden? HierTabhost und Listview SQL-Datenbank verursachen Leck

ist die Listenansicht Aktivität:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contacts); 

     contactlist = (ListView) findViewById(R.id.list); 

     entry.open(); 
     c = entry.getData(); 
     startManagingCursor(c); 

     String[] from = new String[] {"_id", "firstname", "lastname"}; 
     int[] to = new int[] {R.id.iVPI, R.id.tvfirstName, R.id.tvlastName}; 

     adapter = new MySimpleCursorAdapter(this, R.layout.contacts_list_item, c, from, to); 
     contactlist.setAdapter(adapter); 

     contactlist.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(contacts.this, contactsdetails.class); 
       Cursor cursor = (Cursor) adapter.getItem(position); 
       intent.putExtra("ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
       c.close(); 
       startActivity(intent); 
      } 
     }); 
    } 

    protected void onStart() { 
     super.onStart(); 
     entry.open(); 
    } 

    protected void onPause() { 
     super.onPause(); 
     entry.close(); 

    } 
    protected void onStop() { 
     super.onStop(); 
     entry.close(); 
    } 
    protected void onDestroy() { 
     super.onDestroy(); 
     entry.close(); 
    } 

Die tabhostactivity ist ganz einfach:

th = getTabHost(); 
     th.addTab(th.newTabSpec("tag1").setIndicator("Contacts", getResources().getDrawable(R.drawable.book)).setContent(new Intent(this, contacts.class))); 
     th.addTab(th.newTabSpec("tag2").setIndicator("Profile", getResources().getDrawable(R.drawable.mailbox)).setContent(new Intent(this, incomingcallpopup.class))); 
     th.setCurrentTab(0); 

Kann jemand das Leck erkennen?

Vielen Dank im Voraus für Sie helfen.

+0

Wie wird das Leck gemeldet? Versuchen Sie das Memory Analyzer Tool Plugin für Eclipse, es wird Ihnen sagen, welches Objekt zusammen mit viel mehr Daten durchgesickert ist. – Bondax

Antwort

1

Können Sie Quelle von contacts.class und incomingcallpopup.class erhalten?

Das Problem ist, dass Sie versuchen, eine Verbindung zu Db zweimal beim Wechseln zwischen den Registerkarten (Sie schließen nicht Db-Verbindung in der ersten Registerkarte).

Ich hatte dieses Problem in meinem Projekt, als ich 2 SlqHelpers auf 1 db hatte und sie gleichzeitig verwenden.

+1

Vielen Dank, Recht. Ich habe einen dummen Fehler in der incomingcallpopup.class gemacht, wo ich die Datenbank zu spät geschlossen habe. Zu beiden möchte ich Ihnen danken, die sich die Zeit genommen haben, meinen Code durchzusehen. – Max