Ich möchte nur eine einzige Benachrichtigung, nachdem alle Masseneinfügung in die Datenbank erfolgt ist. Geben Sie ein Beispiel für die Verwendung der Funktion bulkInsert() an. Ich kann kein richtiges Beispiel im Internet finden. Bitte helfen !!!!Wie verwendet man die Funktion bulkInsert() in Android?
Antwort
Dies ist BulkInsert mit ContentProvider.
public int bulkInsert(Uri uri, ContentValues[] values){
int numInserted = 0;
String table;
int uriType = sURIMatcher.match(uri);
switch (uriType) {
case PEOPLE:
table = TABLE_PEOPLE;
break;
}
SQLiteDatabase sqlDB = database.getWritableDatabase();
sqlDB.beginTransaction();
try {
for (ContentValues cv : values) {
long newID = sqlDB.insertOrThrow(table, null, cv);
if (newID <= 0) {
throw new SQLException("Failed to insert row into " + uri);
}
}
sqlDB.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
numInserted = values.length;
} finally {
sqlDB.endTransaction();
}
return numInserted;
}
Nennen Sie es nur einmal, wenn Sie mehr in contentcontent [] Werte Array haben.
Ich suchte für immer ein Tutorial, um dies auf der Aktivitätsseite und Inhaltsanbieter Seite zu implementieren. Ich habe "Warlocks" -Antwort von oben verwendet und es funktionierte großartig auf der Seite des Inhaltsanbieters. Ich habe die Antwort von this post verwendet, um das Array ContentValues am Ende der Aktivität vorzubereiten. Ich änderte auch meine ContentValues, um von einer Reihe von kommagetrennten Werten (oder neuen Zeilen, Punkten, Semikolons) zu erhalten. Welche sah wie folgt aus:
ContentValues[] bulkToInsert;
List<ContentValues>mValueList = new ArrayList<ContentValues>();
String regexp = "[,;.\\n]+"; // delimiters without space or tab
//String regexp = "[\\s,;.\\n\\t]+"; // delimiters with space and tab
List<String> splitStrings = Arrays.asList(stringToSplit.split(regexp));
for (String temp : splitStrings) {
Log.d("current student name being put: ", temp);
ContentValues mNewValues = new ContentValues();
mNewValues.put(Contract.KEY_STUDENT_NAME, temp);
mNewValues.put(Contract.KEY_GROUP_ID, group_id);
mValueList.add(mNewValues);
}
bulkToInsert = new ContentValues[mValueList.size()];
mValueList.toArray(bulkToInsert);
getActivity().getContentResolver().bulkInsert(Contract.STUDENTS_CONTENT_URI, bulkToInsert);
ich nicht eine sauberere Weg finden, könnte die abgegrenzte Split-String direkt auf die content Array für bulkInsert zu befestigen. Aber das funktioniert, bis ich es finde.
Versuchen Sie diesen Ansatz.
public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
switch (sUriMatcher.match(uri)) {
case CODE_WEATHER:
db.beginTransaction();
int rowsInserted = 0;
try {
for (ContentValues value : values) {
long _id = db.insert(WeatherContract.WeatherEntry.TABLE_NAME, null, value);
if (_id != -1) {
rowsInserted++;
}
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
if (rowsInserted > 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return rowsInserted;
default:
return super.bulkInsert(uri, values);
}
}
Warlocks Antwort fügt entweder alle oder keine Zeilen ein. Führen Sie auch minimale Aufgaben zwischen setTransactionSuccessful()
und endTransaction()
aus und natürlich keine Datenbankoperationen zwischen diesen beiden Funktionsaufrufen.
Code Quelle: Udacity
- 1. docpine2 - wie man die DATE_ADD Funktion verwendet
- 2. Wie verwendet man die Funktion string.substr()?
- 3. Wie man volley in Android-Bibliotheken verwendet
- 4. Kann Bulkinsert Zombie-Datensätze verursachen?
- 5. Android Wie man location.distanceTo() verwendet
- 6. Wie verwendet man Standardanimationen in Android?
- 7. Wie verwendet man javax.xml.transform.stax in Android Studio?
- 8. Wie verwendet man unordered_map in Android?
- 9. Wie verwendet man TabHost.OnTabChangeListener in Android?
- 10. Wie man korrekt as.POSIXct Funktion in einer cat Funktion verwendet
- 11. Wie verwendet man getchar Funktion und putchar Funktion in C?
- 12. Wie verwendet man die PHP-Funktion ohne Ladequelldatei?
- 13. C++ Wie man eine Funktion aufruft, die Vorlage verwendet
- 14. Wie kann man die Multiwindow-Funktion in Android N aktivieren?
- 15. Wie man Android xliff verwendet: g
- 16. Wie verwendet man die Berechtigung im Android-Framework?
- 17. Wie verwendet man HTTP GET mit Android?
- 18. Wie verwendet man .p12 Zertifikat auf Android?
- 19. android studio: wie man die fbc live template verwendet
- 20. Wie man mehr Parameter in einer element.someEvent Funktion verwendet
- 21. Android: Wie verwendet man verschiedene Themen für verschiedene Android-Versionen?
- 22. Wie man eine Funktion nur verwendet, wenn die Version 11+ ist
- 23. Wie verwendet man SQLiteDatabase.CursorFactory
- 24. android - wie man eine wiederverwendbare Funktion erstellt?
- 25. Wie verwendet man das Paket java.nio.file in Android?
- 26. Wie man Android-Datenbindung in einer Bibliothek verwendet
- 27. Wie verwendet man .obj Datei für Animation in Android?
- 28. Wie verwendet man FFMPEG in android Studio-Projekt?
- 29. Wie man openSSL-Bibliothek in der ANDROID-Anwendung verwendet
- 30. Wie verwendet man die Methode Top() in Apache Pig?
Dies wird * nicht * die verbleibenden Einsätze beenden, wenn einer nicht richtig geht? – Anthony
Dadurch wird jedes einzelne Einfügeelement zurückgesetzt/zurückgesetzt, wenn vor dem Aufruf von setTransactionSuccessful in diesem try/catch-Block eine Ausnahme auftritt. Kurz gesagt, wenn es eine Ausnahme gibt, erhalten Sie überhaupt keine Beilage. – Warlock
Ich habe eine Fehlermeldung erhalten, dass 'Variable 'Tabelle' möglicherweise nicht initialisiert wurde'. Setzen Sie die Deklaration auf 'String table =" ";' löste das Problem. –