मेरे पास लोडर मैनेजर को लागू करने और कर्सर लोडर (कुछ भी फैंसी नहीं) का उपयोग करने वाला एक टुकड़ा है। मैं क्वेरी के दौरान फेंकने वाले अपवादों को पकड़ना चाहता हूं लेकिन मुझे नहीं लगता कि कैसे !!! कोई मदद? धन्यवाद।हैंडल कर्सर लोडर अपवाद
6
A
उत्तर
1
आपको कर्सर लोडर से ऐसा करने की आवश्यकता होगी। कुछ ऐसा:
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);
}
}
आप इसे अपने त्रुटि प्रबंधन को लागू करने के लिए अनुकूलित कर सकते हैं।
+0
धन्यवाद। मैंने विरासत से बचने की कोशिश की लेकिन ... – denispyr
2
मैंने श्रोता को वारिस करने और लागू करने का प्रयास किया, फिर मैंने कॉलबैक को प्राप्त करने और कार्यान्वित करने का प्रयास किया। सबसे सरल और कम दखल समाधान, मेरे मामले में, निम्नलिखित
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();
}
}
आपका प्रश्न थोड़ा स्पष्ट नहीं है में हो रहा है। आपको किस प्रकार के अपवादों को पकड़ने की ज़रूरत है? क्या आपने ब्लॉक को आजमाने और पकड़ने की कोशिश की है? –
मेरे पास ऐसा कुछ है: – denispyr
मेरा टुकड़ा लोडर मैनेजर लागू करता है और क्रेटलोडर, ऑनलोड लोड और ऑनलोडरसेट पर लागू करता है। ऑनक्रेट लोडर विधि एक कर्सर लोडर उदाहरण बनाता है। अब तक बहुत अच्छा, कुछ भी कल्पना नहीं है। अब, कहें कि जब कर्सर को चलाने और सामग्री को वितरित करने का प्रयास किया जाता है तो कर्सर अपवाद फेंकता है। मैं इसे कहाँ पकड़ सकता हूँ? ध्यान दें कि मेरा कोड कभी भी कर्सर को स्पष्ट रूप से नहीं चलाता है, यह लोडर द्वारा किया जाता है। – denispyr