[JAVA] Schwere Abfragen asynchron durchführen

Was ist AsyncQueryHandler?

Motivation

Hauptmethoden

Methodenname Überblick
startDelete(int token, Object cookie, Uri uri, String selection, String[] selectionArgs) Asynchron löschen.
startInsert(int token, Object cookie, Uri uri, ContentValues initialValues) Asynchron einfügen.
startQuery(int token, Object cookie, Uri uri, String[] projection, String selection, String[] selectionArgs, String orderBy) Asynchron abfragen.
startUpdate(int token, Object cookie, Uri uri, ContentValues values, String selection, String[] selectionArgs) Asynchron aktualisieren.
onDeleteComplete(int token, Object cookie, int result) Wird aufgerufen, wenn die startDelete-Methode abgeschlossen ist
onInsertComplete(int token, Object cookie, Uri uri) Wird aufgerufen, wenn die startInsert-Methode abgeschlossen ist
onQueryComplete(int token, Object cookie, Cursor cursor) Wird aufgerufen, wenn die startQuery-Methode abgeschlossen ist
onUpdateComplete(int token, Object cookie, int result) Wird aufgerufen, wenn die startUpdate-Methode abgeschlossen ist

Das erste Argument, Token, ist der Wert, mit dem der Prozess identifiziert wird. Das zweite Argument-Cookie ist das Objekt, das übergeben werden soll, wenn es abgeschlossen ist Das dritte Argument der nach Abschluss aufgerufenen Methode ist der Rückgabewert jeder entsprechenden Methode

Annahme

Programm

Klasse, die AsyncQueryHandler erbt

class CustomAsyncQueryHandler extends AsyncQueryHandler {

    private static final String[] PROJECTION = new String[]{UserColumns.ID, UserColumns.NAME, UserColumns.EMAIL};

    private final AsyncQueryHandlerActivity activity;

    CustomAsyncQueryHandler(ContentResolver cr, AsyncQueryHandlerActivity activity) {
        super(cr);
        this.activity = activity;
    }

    @Override
    protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
        super.onQueryComplete(token, cookie, cursor);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                activity,
                android.R.layout.simple_list_item_2,
                cursor,
                PROJECTION,
                new int[]{android.R.id.text1, android.R.id.text2});

        activity.setListAdapter(adapter);
    }

    void insert(String name, String address) {
        ContentValues value = new ContentValues();
        value.put(UserColumns.NAME, name);
        value.put(UserColumns.EMAIL, address);
        startInsert(0, null, UserColumns.CONTENT_URI, value);
    }

    void delete() {
        startDelete(0, null, UserColumns.CONTENT_URI, null, null);
    }

    void findAll() {
        startQuery(0, null, UserColumns.CONTENT_URI, PROJECTION, null, null, null);
    }

    void findById(String where, String[] value) {
        startQuery(0, null, UserColumns.CONTENT_URI, PROJECTION, where, value, null);
    }
}

Activity

public class HogeHogeActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        CustomAsyncQueryHandler asyncQueryHandler = new CustomAsyncQueryHandler(getContentResolver(), this);

        // Delete
        asyncQueryHandler.delete();

        // Insert
        for (int i = 1; i <= 50; i++) {
            asyncQueryHandler.insert(UserColumns.NAME + i, UserColumns.EMAIL + i);
        }

        // Select
        asyncQueryHandler.findAll();

    }

}

Vielleicht gibt es einen besseren Weg, aber dies war damals die Lösung.

Referenz

https://developer.android.com/reference/android/content/AsyncQueryHandler.html http://shop.oreilly.com/product/0636920029397.do

Recommended Posts

Schwere Abfragen asynchron durchführen
Wie man ein schattiertes Glas macht
Java - So erstellen Sie JTable
[Schienen] Wie man Samen macht
So erstellen Sie einen Java-Container
SpringBoot + Redis Einfache Demo
So erstellen Sie einen JDBC-Treiber
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)
Versuchen Sie, einen Iterator zu erstellen, der einen Blick darauf werfen kann
So erstellen Sie ein Java-Array
[Android] So erstellen Sie ein Dialogfragment