LoaderManagerを実装し、CursorLoaderを使用しているフラグメントがあります(特別なことは何もありません)。クエリ中にスローされた例外をキャッチしたいのですが、方法がわかりません!!! 何か助けはありますか?どうも。
1593 次
2 に答える
3
リスナーを継承して実装しようとした後、コールバックを継承して実装しようとしました。私の場合、最も単純で邪魔にならない解決策は次のようです
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);
}
}
そしてフラグメント/アクティビティで
@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();
}
}
于 2012-12-06T21:54:48.790 に答える
1
これを行うには、CursorLoaderから派生する必要があります。このようなもの:
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);
}
}
エラー処理を実装するためにそれを適応させることができます。
于 2012-12-05T18:39:10.173 に答える