Ich habe ein Projekt mit SQLite-Datenbank in Android. Ich möchte einige Operationen ausführen, zum Beispiel eine Zeile speichern, alle Zeilen aus der Tabelle lesen, Zeile löschen usw. Ich möchte diese Operationen in einem anderen Thread ausführen. Meine Frage ist: welche Multitasking-Methode sollte ich verwenden? Ich habe über eine Klasse nachgedacht, etwas wie Datenbankmanager, der einige Methoden enthält, die Operationen darstellen, die ich oben geschrieben habe. Ich habe keine Idee, wie ich es einfach und einfach machen kann. Vielleicht hilft mir Service bei dieser Aufgabe oder vielleicht sollte ich eine andere Klasse für eine Operation verwenden, zum Beispiel eine AsyncTask-Klasse für eine Operation? Ich warte auf alle deine Antworten und Ratschläge. Vielen Dank!Ausführen von SQLite-Operationen in einem anderen Thread
Antwort
Ich würde denken, ein Hintergrund-Service ist ein bisschen übertrieben für einfache Datenbankoperationen.
In den meisten Fällen würde ich einen ListView mit einem Cursor Adapter für Listentyp Daten verwenden, die zum Scrollen benötigt wurde. Für kleinere Datensätze, vielleicht < 10 Zeilen, würde ich nur die Daten im UI-Thread abrufen.
Für komplexere Operationen, sagen wir den Zustand der DB beim Start überprüfen oder eine Reihe von Zeilen entfernen, würde ich eine AsyncTask für jeden Zweck schreiben.
Ich habe ORM Lite für fast alle meine Android SQL Lite-Projekte für eine Weile jetzt verwendet und ich folge nur der Konvention eines Singleton DatabaseManager und Methoden innerhalb der Manager-Klasse, die benutzerdefinierte Abfragen erfordern.
können Sie AsyncTask verwenden für this.In seine doInBackground() -Methode können Sie alle Operationen wie das Hinzufügen der Tabelle zu den Inhalten usw.
Fügen Sie diese in Ihrer Aktivität erforderlich machen.
private class myTask extends AsyncTask<Void, Void, Bitmap> {
DataBaseHelper db=new DataBaseHelper(context);
protected void doInBackground(Void... params) {
db.addData(.....);
}
}
Und die folgende ist die DataBaseHelper-Klasse.
public class DataBaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
// Database Name
public static final String DATABASE_NAME = "YourName.db";
// table name
public static final String TABLE_DATA = "your Table name";
// Table Columns names
public static final String KEY_ID = "id";
public static final String KEY_NAME = "DataName";
public static final String KEY_CONTENT = "Content";
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_DATA = "CREATE TABLE " + TABLE_DATA + "("
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT,"
+ KEY_CONTENT + " TEXT" + ")";
db.execSQL(CREATE_TABLE_DATA);
public void addData(DataBaseModel dataBaseModel) {
SQLiteDatabase db1 = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, dataBaseModel.getDataName()); // Contact Name
values.put(KEY_CONTENT, dataBaseModel.getContent()); // Contact Phone
// Inserting Row
db1.insert(TABLE_DATA, null, values);
//Toast.makeText(context, "New row added, row id: " , Toast.LENGTH_SHORT).show();
db1.close(); // Closing database connection
}
// Getting single data
public String getData(String dataName) {
String data=null;
SQLiteDatabase db = this.getReadableDatabase();
//SQLiteDatabase db2=SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.CREATE_IF_NECESSARY);
Cursor cursor = db.query(TABLE_DATA, new String[]{KEY_ID,
KEY_NAME, KEY_CONTENT}, KEY_NAME + "=?",
new String[]{dataName}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
try {
data = cursor.getString(cursor.getColumnIndex(KEY_CONTENT));
}catch (Exception e){
e.printStackTrace();
data=null;
}
cursor.close();
return data;
}
- 1. Ausführen einer Funktion in einem anderen Thread in QT
- 2. Einfügen in Listenansicht von einem anderen Thread
- 3. Abfangen von Ausnahmen von einem anderen Thread
- 4. Stop Thread von anderen Thread
- 5. Kann ich gc collect auf einem anderen Thread als dem Haupt-Thread in Unity3D ausführen?
- 6. JavaFX Aktualisierung UI von einem anderen Thread
- 7. Webformular: Update Textbox von einem anderen Thread
- 8. Label von einem anderen Thread aktualisieren
- 9. Daten von Array aus einem anderen Thread
- 10. Erwartet googlemock Anrufe von einem anderen Thread
- 11. Zugriff auf Haupt-Thread-Ansichten von einem anderen Thread
- 12. Einen Socket-Stream in einem Thread ausführen
- 13. Wie Webanforderung in einem eigenen Thread ausführen?
- 14. Wie stoppe ich einen Thread von einem anderen Thread
- 15. Schließen Haupt von einem anderen Thread
- 16. WPF - Update "System.Windows.Controls.Image" von einem anderen Thread
- 17. Aktualisieren einer Fortschrittsanzeige von einem anderen Thread
- 18. Rückgabe von Objekten aus einem anderen Thread?
- 19. Update ListView im Haupt-Thread von einem anderen Thread
- 20. Wie bekomme ich einen Thread-Status von einem anderen Thread?
- 21. Code in einem anderen Benutzerkontext ausführen
- 22. ein TreeView Itemssource in einem anderen Thread
- 23. ArrayList leer in einem anderen Thread
- 24. Ausführen von SolrCloud auf einem anderen Computer
- 25. Zeige Fortschrittsbalken in einem anderen Thread
- 26. ein WPF-Polygon in einem anderen Thread
- 27. Ausführen von Code auf dem Hauptthread von einem sekundären Thread?
- 28. Informationen über Threaded tcpserver von einem Thread zu einem anderen
- 29. Java: Wie erhalte ich InterruptedException in einem Thread, wenn er von einem anderen Thread unterbrochen wird?
- 30. Können wir Thread in anderen Header-Datei ausführen?