Je suis nouveau à Android. J'ai une application travaillant avec SQLite DB. J'ai besoin de pousser des valeurs de la base de données à une arrayliste d'objet de type. Le code que j'ai utilisé est donné ici.
private ArrayList<objectname> objectList = new ArrayList<objectname>(); //function used to get values from database public ArrayList<objectname> getResults() { MyDb db = new MyDb(this); //my database helper file db.open(); Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file if (c.moveToFirst()) { do { String date = c.getString(c.getColumnIndex("date")); try { ob = new objectname(); ob.setDate(c.getString(c.getColumnIndex("date")));// setDate function is written in Class file objectList.add(ob); } catch (Exception e) { Log.e(MY_DEBUG_TAG, "Error " + e.toString()); } } while (c.moveToNext()); } db.close(); return objectList; }
3 Réponses :
Probablement votre requête Dessine un blanc et Qu'en est-il de la journalisation de la valeur de MOVETOFIRST code> renvoie false. p>
c.gecount () code> avant votre
si code> instruction? p>
Ensuite, votre code devrait fonctionner. Est-ce le code réel que vous utilisez?
Merci Matthew Willis.my code actuel ressemble à celui que j'ai posté ici.
Probablement la différence entre le code réel et le code que vous avez affiché est l'endroit où l'erreur est.
Essayez ceci:
private ArrayList<objectname> objectList = getResults(); private ArrayList<objectname> getResults() { MyDb db = new MyDb(this); //my database helper file db.open(); ArrayList<objectname> resultList = new ArrayList<objectname>(); Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file while (c.moveToNext()) { String date = c.getString(c.getColumnIndex("date")); try { ob = new objectname(); ob.setDate(date);// setDate function is written in Class file resultList.add(ob); } catch (Exception e) { Log.e(MY_DEBUG_TAG, "Error " + e.toString()); } } c.close(); db.close(); return resultList; }
Son travaillé, quand j'ai supprimé db.close () de mon code et que c.Flose (). Mais je pense que db.open () et db.close () est nécessaire. Mais maintenant, le problème est que, certaines erreurs et affirmations d'alerte sont présentées dans logcat..warn / sqlitecompiledsql (10839): relative déclaration dans un finaliseur. Assurez-vous que vous appelez explicitement close () sur votre curseur: avertissement / sqlitecompiledsql (10839): android.database.sqlite.databaseObjectNotcledException: application n'a pas fermé le curseur ou l'objet de base de données ouverte ici .Close () n'a jamais été explicitement appelé base de données. Et plus d'erreurs de base de données affichent également
ajouter db.close (); après c.Flose ();
Merci Runor49 pour votre aide. Votre aide est vraiment appréciable et +1 pour votre aide. Pouvez-vous s'il vous plaît aidez-moi dans ce problème à un lien donné.
J'ai eu un problème similaire avec la récupération des valeurs de la DB à l'aide de curseurs et affichant à l'écran. La solution ci-dessous fonctionne pour moi ..
Cursor cur = db.getAllValues(); int index = c.getColumnIndex("date"); cur.moveToFirst(); while (cur.isAfterLast() == false) { System.out.println(cur.getString(index)); // For debug purposes String date = cur.getString(index); try { ob = new objectname(); ob.setDate(date); resultList.add(ob); } catch (Exception e) { Log.e(MY_DEBUG_TAG, "Error " + e.toString()); } cur.moveToNext(); } cur.close();
Quel paramètre "Ceci" satisfait-il lors de la création de votre instance DB Manager? À quoi ressemble le constructeur?