6

Tôi có Trình quản lý tải xuống thực thi Fragment và sử dụng CursorLoader (không có gì lạ mắt). Tôi muốn bắt ngoại lệ ném trong truy vấn nhưng tôi không thấy như thế nào !!! Bất kỳ giúp đỡ? Cám ơn.Xử lý ngoại lệ CursorLoader

+0

Câu hỏi của bạn là một chút không rõ ràng. Loại ngoại lệ nào bạn cần phải nắm bắt? Bạn đã cố gắng thử và bắt khối? –

+0

Tôi có một cái gì đó như thế này: – denispyr

+0

My Fragment thực hiện LoaderManager và thực hiện onCreateLoader, onLoadFinished và onLoaderReset. Phương thức onCreateLoader tạo ra một cá thể CursorLoader. Cho đến nay rất tốt, không có gì lạ mắt. Bây giờ, nói rằng con trỏ ném một ngoại lệ khi nó cố gắng chạy và phân phối nội dung cho Fragment. Tôi có thể bắt nó ở đâu? Lưu ý rằng mã của tôi không bao giờ chạy một cách rõ ràng con trỏ, điều này được thực hiện bởi bộ nạp. – denispyr

Trả lời

1

Bạn sẽ cần phải lấy được từ CursorLoader để làm điều đó. Một cái gì đó như thế này:

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

} 

Bạn có thể điều chỉnh để thực hiện xử lý lỗi của mình.

+0

Cảm ơn. Tôi đã cố gắng để tránh thừa kế nhưng ... – denispyr

2

Tôi đã cố gắng kế thừa và triển khai trình nghe, sau đó tôi đã cố gắng kế thừa và triển khai gọi lại. Giải pháp đơn giản nhất và ít xâm nhập, trong trường hợp của tôi, có vẻ là như sau

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

Và trong đoạn/hoạt động

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