2011-09-02 2 views
0

Je sais qu'il ya des discussions similaires à celui-ci, mais je les ai lu et essayé les méthodes pour résoudre le problème, mais il ne semble pas le faire. je reçois le:Android base de données de fermeture SQLite entre 2 activités

close() n'a jamais été appelé base de données explicity/données/données ...

demande ne fermez pas la base de données ou un curseur qui a été ouvert ...

Mon erreur ne se produit pas directement, cela arrive après un moment, quand je suis allée et venir entre les deux activités.

J'utilise deux activités qui ont toutes deux besoin d'une connexion à la base de données. Mon idée était pour la première activité de fermer la base de données avant le début de l'autre activité. Voici mon code:

@Override 
public void onCreate(Bundle savedInstance) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    movies = new MoviesData(this); 
    cursor = getTitles(); 
    showTitles(cursor); 
} 

@Override 
public void onPause() { 
    movies.close(); 
    super.onPause(); 
} 

@Override 
public void onResume() { 
    movies = new MoviesData(this); 
    super.onResume(); 
} 

Ceci est ma première activité, le second est à peu près semblables et a commencé sur un ButtonPress. La classe MoviesData est juste une classe vide SQLiteOpenHelper trouvée ci-dessous.

public class MoviesData extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "movies.db"; 
    private static final int DATABASE_VERSION = 1; 

    public MoviesData(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
} 

Je sais maintenant quand l'erreur est affiché. Si je quitte l'application, puis l'ouvre à nouveau et essaie de faire quelque chose que l'erreur montre. J'ai essayé de fermer la base de données « OnDestroy() », mais cela ne suffit pas non plus ...

Répondre

0

Je l'ai fait travailler maintenant! Je viens de l'ajouter à ma classe SQLiteOpenHelper.

public class MoviesData extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "movies.db"; 
    private static final int DATABASE_VERSION = 1; 

    private static MoviesData movies; 

    private MoviesData(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public static MoviesData getInstance(Context context) { 
     if (movies == null) { 
      movies = new MoviesData(context); 
     } 
     return movies; 
    } 

}

0
// 
@Override 
public void onPause() { 
    super.onPause(); 
    movies.close(); 
cursor.close(); 

} 
// no need to write this code 
@Override 
public void onResume() { 
    movies = new MoviesData(this); 
    super.onResume(); 
} 
+0

Si je n'ai pas le onResume(), quand je repousse de la deuxième activité pour revenir au premier, je n'ai rien montrer plus. J'ai besoin d'obtenir l'information en utilisant cursor = getTitles() –

+0

alors vous devriez utiliser des données statiques – sravan

Questions connexes