Реализация AsyncQueryHandler

Я пытаюсь реализовать AsyncQueryHandler, потому что я испытываю ту же самую проблему в этой ссылке, но я не вижу никакого примера или что-то о его реализации.

Я пробовал делать

AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver());

так как это то, что конструктор показывает в docs, но я получаю сообщение об ошибке cannot instantiate the type AsyncQueryHandler, так как я могу его использовать?

Ответы

Ответ 1

AsyncQueryHandler является абстрактным классом, поэтому вы не можете его напрямую создать. Вам нужно подклассифицировать его.

Ответ 2

Это так удобно:

AsyncQueryHandler handler = 
    new AsyncQueryHandler(mActivity.getContentResolver()) {};
handler.startUpdate(-1, null, sessionUri, values, null, null);

Ответ 3

Это очень удобно, когда вам нужно выполнить аудит CRUD без использования Loader, поэтому, расширяя его от asyncquery, вы получаете такой метод, как startQuery, startInsert, startUpdate и startDelete легкая реализация может быть:

public class CustomAsyncHandler extends AsyncQueryHandler {

        private WeakReference<AsyncQueryListener> mListener;

        public interface AsyncQueryListener {
            void onQueryComplete(int token, Object cookie, Cursor cursor);
        }

        public CustomAsyncHandler(ContentResolver cr, AsyncQueryListener listener) {
            super(cr);
            mListener = new WeakReference<AsyncQueryListener>(listener);
        }

        public CustomAsyncHandler(ContentResolver cr) {
            super(cr);
        }

        /**
         * Assign the given {@link AsyncQueryListener} to receive query events from
         * asynchronous calls. Will replace any existing listener.
         */
        public void setQueryListener(AsyncQueryListener listener) {
            mListener = new WeakReference<AsyncQueryListener>(listener);
        }

        /** {@inheritDoc} */
        @Override
        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
            final AsyncQueryListener listener = mListener.get();
            if (listener != null) {
                listener.onQueryComplete(token, cookie, cursor);
            } else if (cursor != null) {
                cursor.close();
            }
        }

    }

Как вы видите, есть дополнительный интерфейс AsyncQueryListener, созданный как обратный вызов, когда запрос завершен, так как вы можете создать AsyncUpdateListener, AsyncDeleteListener, AsyncInsertListener и т.д.

Ответ 4

 AsyncQueryHandler asyncQueryHandler = new AsyncQueryHandler(activity.getContentResolver()){

        @Override
        protected void onInsertComplete(int token, Object cookie, Uri uri) {
            super.onInsertComplete(token, cookie, uri);
            Log.d(TAG, "onInsertComplete  return uri: " + uri);
        }

 };

 asyncQueryHandler.startInsert(-1, null, mUri, values);