2012-04-01 13 views
3

Ich bin im Grunde eine Anwendung, die ich (meine allererste!) Entwickeln, mit Ausnahme der Implementierung von Daten speichern Mechanismus. Ich habe mir vor einiger Zeit die Optionen angeschaut und festgestellt, dass die SQLiteDatabase die beste Lösung ist, aber es war schwierig, genau zu verstehen, wie genau es implementiert werden sollte. Also verließ ich es, bis ich den Rest des Programms beendet hatte. Seitdem habe ich es getestet, indem ich jedes Mal, wenn ich es auf meinem Gerät starte, alle Werte neu eingib.Wo/Wie SQLiteDatabase und AsyncTask in TabActivity zu implementieren

Die App beginnt mit nichts auf dem Bildschirm. Der Benutzer fügt Spieler hinzu (über das Menü und einen Dialog). Sobald die Spielerliste finalisiert ist, klickt der Benutzer auf "Speichern" im Dialog. Dann wird eine Tabellenreihe für jeden Spieler dynamisch aufgebläht und enthält einen Button, einige ImageViews und eine TextView, die alle Attribute jedes Players anzeigen. Das ist für meine Frage nicht wirklich wichtig.

Also wird meine Anwendung im Grunde nur Spieler Objekte verfolgen. Ich habe das Datenbankobjekt alle mit diesem Leitfaden erstellt: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/, "Kontakte" für "Spieler" zum größten Teil tauschen.

Was ich habe Schwierigkeiten zu verstehen ist, wo genau das "Speichern" und "Laden" jedes Spieler-Objekts, sowie was in den onCreate, onResume und onStop Methoden der Aktivität zu tun ist zu implementieren. Ich habe das schon seit vielen Stunden untersucht, und ich habe gelernt, dass ich auch eine AsyncTask implementieren sollte, aber das ist noch komplizierter und ich kann nicht einmal die grundlegenden Daten in mein Gehirn laden, geschweige denn asynchron .

Es gibt ein gutes Beispiel für die Implementierung von AsyncTask und SQLiteDatabase in einem Buch namens "Android for Programmers: Ein App-Driven Approach" in der Deitel Developer Series, aber in ihrem Beispiel verwenden sie einen CursorAdapter in eine ListActivity, also weiß ich nicht, wie ich es für meine Situation anwenden kann. (Meine ist eine TabActivity, was ich oben erklärt habe, ist nur für einen "View Players" Tab.)

Es macht für mich Sinn, Spieler der Datenbank hinzuzufügen, wenn der Benutzer im Dialog "Spieler hinzufügen" auf "Speichern" klickt, "Aber ich verstehe nicht, wo die Player-Objekte neu geladen werden und wo die Tabellenzeile jedes Players neu angelegt wird.

Es tut mir leid, ich poste keinen Code, um genauer zu sein, aber es ist eher eine allgemeine Frage, und ich würde lieber nicht meine gesamte App veröffentlichen, da es etwa tausend Zeilen lang ist. Jede Hilfe würde sehr geschätzt werden, ich versuche nicht, jedes kleine Ding hier zu posten, aber dieses Zeug hat mich zu lange frustriert!

Antwort

0

AsyncTasks sind Schmerzen, wenn es um Konfigurationsänderung (z. B. Drehung des Telefons) kommt und es leicht ist, Speicherlecks zu erstellen. Sie sollten lieber einen Loader verwenden. Es macht nichts, den Namen, es kann auch verwendet werden, um Daten zu schreiben - grundsätzlich für jede Operation im Hintergrund. Genauer gesagt würde ich eine AsyncTaskLoader verwenden und in loadInBackground() Methode würde ich einen Datenbank-Helper zu SELECT oder Einfügen der Daten mit ihm. Datenbankhelfer sollte eine Erweiterung von SQLiteOpenHelper sein und sollte nur einmal instanziiert werden, also würde ich vorschlagen, sie in den Anwendungskontext zu setzen und die Referenz von dort zu holen.

Ich hoffe, es hilft.

+0

Hallo, danke für die Antwort. Ich mache mir keine Sorgen, dass sich das Telefon dreht, da es im Manifest auf "Porträt" eingestellt ist. Ich mache mir mehr Sorgen darüber, wo ich jedes Stück Code ablegen soll. Ich weiß, wo ich Dinge "speichern" soll, aber ich weiß nicht, wie ich jedes Mal, wenn der Benutzer die App neu startet, alles neu lade, insbesondere in Bezug auf onCreate(), onResume(), onStop() usw. Diese Methoden verwende ich immer noch nicht verstehe nicht vollständig, wenn es um gespeicherte Informationen geht, um den Zustand wiederherzustellen usw. –

+0

Außerdem habe ich die AsyncTaskLoader-Dokumente ausgecheckt, mit denen Sie verknüpft sind. Es heißt, dass sie in Android 3.0 eingeführt wurden, also kann ich sie nicht verwenden, da meine App (und mein Telefon) für API 8+ sind. –

+1

Sie können! Sie sind im Kompatibilitätspaket, also können Sie sie für API 7+ verwenden, wenn ich mich gut erinnere –

1

Ich habe das gleiche Buch wie du. Ich folgte der AddressBook App (die sich mit einem DatabaseConnector beschäftigt) und es hat mir ziemlich geholfen. Jetzt kann ich meinen Code mit dir teilen (ich habe ein anderes Android Hive-Tutorial für Login/Registrierung über SQL/PHP-Skripte gefolgt) und dann erfolgreich verschoben, um ASyncTask zu verwenden. Das heißt, der Teil, an dem ich gerade arbeite, repliziert die lokale SQLite-Datenbank: Ich muss sie holen, um die E-Mail-Adresse des eingeloggten Benutzers zu speichern, damit ich diese Informationen auf dem Bildschirm anzeigen kann.Außerdem habe ich eine Seite, auf der der Benutzer weitere Informationen (Alter, Nationalität, etc.) einreichen kann und die App dann diese Daten auf dem SQL-Server mit dem Rest ihrer Kontoinformationen speichert.

Also wie gesagt, ich Ich würde mich freuen, diesen Code mit Ihnen zu teilen, aber es ist nicht genau das, wonach Sie suchen, da es sich um eine Netzwerkdatenbank und nicht um eine lokale SQLite-Datenbank handelt. Es wird den SQLite db Aspekt haben, ich habe diesen Teil gerade nicht beendet.

Schließlich empfehle ich AddressBook aus Ihrem Deitel-Buch, es hat mir wirklich geholfen.

+0

Danke für die Antwort. Du hast Recht, ich bin nicht an einer Netzwerk-Datenbank interessiert, aber die lokale, sobald du es auf und ab gehst, würde mir sehr helfen, da es genauso klingt wie das, was ich mache. Jedes Player-Objekt in meiner App behält die Dinge im Auge, genau wie Ihre App das Alter, die Nationalität usw. nachverfolgt. Ich habe versucht, das Deitel-Buch für meine App zu verwenden, aber die Art, wie sie es erklären, ist: "Nun, wir haben eine ListView automatisch verwendet macht alles, weil es eine ListActivity ist. " Also, es hilft mir nicht für meine App. Das Buch ist in vieler Hinsicht gut, aber in anderen schlecht. –

+0

Ich stimme zu. Ich werde versuchen, später noch ein paar Infos darüber zu veröffentlichen, wie ich später mit meinem lokalen SQLite dB arbeite, würdest du mir lieber diesen Beitrag bearbeiten oder eine andere Antwort hinterlassen? – Davek804

+0

Es ist wahrscheinlich einfacher wegen der Zeichengrenze, um eine andere Antwort fallen zu lassen? Was auch immer funktioniert, ich bin verzweifelt. –

Verwandte Themen