android - 处理 CursorLoader 异常

标签 android exception-handling android-loadermanager android-cursorloader

我有一个 Fragment 实现 LoaderManager 并使用 CursorLoader(没什么特别的)。我想捕获查询期间抛出的异常,但我不知道如何处理!!!有什么帮助吗?谢谢。

最佳答案

我尝试继承并实现一个监听器,然后我尝试继承并实现一个回调。就我而言,最简单且侵入性较小的解决方案似乎如下

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

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

关于android - 处理 CursorLoader 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13551219/

相关文章:

android - 如何获取设备 token

android - 如何使用React Native ART库ARC方法画饼图

python - traceback.format_exc/print_exc 在期望回溯时返回 None

android - fragment 中的 AsyncTaskLoader

java - 数据更改时刷新加载程序 - android

android - 为什么垃圾收集器在未达到最大堆限制的情况下运行?

java - onButtonClick 从未在源代码中使用过?

c++ - main前后的异常处理

exception-handling - cuda 异常后的内存数据状态

android - getSupportLoaderManager() 在不同 fragment 中使用相同的 ID?