14

我正在尝试实施,因为我在此链接AsyncQueryHandler中遇到了同样的问题,但我没有看到任何示例或任何关于实施它的内容。

我试着做

AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver());

因为这是构造函数在文档中显示的内容,但我收到一条错误消息,cannot instantiate the type AsyncQueryHandler那么我该如何使用它呢?

4

4 回答 4

17

太方便了:

AsyncQueryHandler handler = 
    new AsyncQueryHandler(mActivity.getContentResolver()) {};
handler.startUpdate(-1, null, sessionUri, values, null, null);
于 2012-11-13T02:40:15.080 回答
11

AsyncQueryHandler是一个抽象类,因此您不能直接实例化它。您需要对其进行子类化。

于 2012-08-14T22:42:31.043 回答
11

当您需要在不使用 Loader 的情况下异步执行 CRUD 操作时,它非常方便,因此通过从 asyncquery 扩展您可以获得诸如startQuerystartInsertstartUpdatestartDelete之类的方法,一个简单的实现可能是:

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 等。

于 2013-05-24T00:20:54.103 回答
0
 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);
于 2017-06-18T15:07:10.503 回答