[JAVA] Pour effectuer des requêtes lourdes de manière asynchrone

Qu'est-ce qu'AsyncQueryHandler?

Motivation

Principales méthodes

Nom de la méthode Aperçu
startDelete(int token, Object cookie, Uri uri, String selection, String[] selectionArgs) Supprimer de manière asynchrone.
startInsert(int token, Object cookie, Uri uri, ContentValues initialValues) Insérer de manière asynchrone.
startQuery(int token, Object cookie, Uri uri, String[] projection, String selection, String[] selectionArgs, String orderBy) Requête de manière asynchrone.
startUpdate(int token, Object cookie, Uri uri, ContentValues values, String selection, String[] selectionArgs) Mettre à jour de manière asynchrone.
onDeleteComplete(int token, Object cookie, int result) Appelé lorsque la méthode startDelete se termine
onInsertComplete(int token, Object cookie, Uri uri) Appelé lorsque la méthode startInsert se termine
onQueryComplete(int token, Object cookie, Cursor cursor) Appelé lorsque la méthode startQuery se termine
onUpdateComplete(int token, Object cookie, int result) Appelé lorsque la méthode startUpdate se termine

Le premier argument, token, est la valeur utilisée pour identifier le processus. Le deuxième argument cookie est l'objet à transmettre une fois terminé Le troisième argument de la méthode appelée à la fin est la valeur de retour de chaque méthode correspondante

supposition

programme

Classe qui hérite AsyncQueryHandler

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();

    }

}

Il y a peut-être une meilleure solution, mais c'était la solution à l'époque.

référence

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

Recommended Posts

Pour effectuer des requêtes lourdes de manière asynchrone
Comment faire un pot ombré
Java - Comment créer JTable
[Rails] Comment faire des graines
Comment créer un conteneur Java
SpringBoot + Redis Démo facile à faire
Comment créer un pilote JDBC
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment faire un projet Maven
CompletableFuture Getting Started 2 (Essayez de faire CompletableFuture)
Essayez de créer un itérateur qui puisse être vu
Comment créer un tableau Java
[Android] Comment créer un fragment de dialogue