Handle CursorLoader exceptions

社会主义新天地 提交于 2019-12-06 01:40:04

问题


I have a Fragment implementing LoaderManager and using CursorLoader (nothing fancy). I want to catch exceptions thrown during the query but I don't see how!!! Any help? Thx.


回答1:


You would need to derive from CursorLoader to do it. Something like this:

class MyCursorLoader extends CursorLoader {

    public MyCursorLoader(Context context) {
         super(context)
      }

    public CursorLoader(Context context, Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        super(context, uri, projection, selection, selectionArgs, sortOrder);
    }

    @Override
    public Cursor loadInBackground() {

        try {
            return (super.loadInBackground);
        } catch (YourException e) {
            // Do your thing.
        }

        return (null);
    }

}

You can adapt it to implement your error handling.




回答2:


I tried to inherit and implement a listener, then I tried to inherit and implement a callback. The most simple and less intrusive solution, in my case, seems to be the following

public class CursorLoaderGraceful extends CursorLoader {
    public Throwable error; // holder
    public CursorLoaderGraceful(Context context) {
        super(context);
    }
    public CursorLoaderGraceful(Context context, Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        super(context, uri, projection, selection, selectionArgs, sortOrder);
    }
    public void OnQueryException(RuntimeException throwable) {
        throw throwable;
    }

    @Override
    public Cursor loadInBackground() {
        try {
            return (super.loadInBackground());
        } catch (Throwable t) {
            error = t; // keep it
        }
        return (null);
    }
}

And in the fragment / activity

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    CursorLoaderGraceful loader = new CursorLoaderGraceful(this., other, params, go , here);
    // ...
    return loader;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    //trivial code
    mAdapter.swapCursor(data);
    if (this.isResumed()) {
        this.setListShown(true);
    } else {
        this.setListShownNoAnimation(true);
    }

    //check and use
    Throwable loaderError = ((CursorLoaderGraceful)loader).error;
    if (loaderError != null) {
        //all these just to show it?!?!? :/
        Toast.makeText(this, loaderError.getMessage(), Toast.LENGTH_SHORT)
                .show();
    }
}


来源:https://stackoverflow.com/questions/13551219/handle-cursorloader-exceptions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!