0

FileObserver works fine for the most part but sometimes the following exception occurs:

FileObserver: Unhandled exception occurs

When a new file is added to the folder the FileObserver observes. But this error does not occur every time a new file is added to the folder, but happens randomly, and I don't know how to fix it. I have attached the code to the FileObserver and the method that are using it.

(CallLatestReceiptData) just calls a different method which calls the addNewReceipt method with the file path of the new added file in the folder. Here is the code:

private void initializeFileObserver() {
    observer = new FileObserver(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/" + "Receipt Manager" + "/") {
        @Override
        public void onEvent(int event, String file) {
            switch (event) {
                case FileObserver.CREATE:
                    callLatestReceiptData(file);
                    Log.d(OBSERVER_LOG, "File created 1 [" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + file + "]");
                    break;
            }
        }
    };
    observer.startWatching();
}

private void addNewReceipt(String path) {

    Log.d(RECEIPT_SERVICE_LOG, "Called Database AddNewReceipt");
    String picturePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/" + "Receipt Manager" + "/" + path;
    Log.d(RECEIPT_SERVICE_LOG, "Set PicturePath AddNewReceipt");
    Log.d(RECEIPT_SERVICE_LOG, picturePath);

    Bitmap rotatedBitmap = createRotateAndScaleBitmap(picturePath);
    Log.d(RECEIPT_SERVICE_LOG, "Rotated Bitmap AddNewReceipt");
    byte[] byteArrayPicture = convertBitmapToByteArray(rotatedBitmap);
    Log.d(RECEIPT_SERVICE_LOG, "Rotated Bitmap AddNewReceipt");

    String date = picturePath.replace(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/" + "Receipt Manager" + "/", "").replace(".jpg", "");
    Log.d(RECEIPT_SERVICE_LOG, "Set Date AddNewReceipt");
    final Receipts receipts = new Receipts("", "", date, "", "", 0, byteArrayPicture, 1);
    Log.d(RECEIPT_SERVICE_LOG, "Created New Receipt AddNewReceipt");

    receiptDatabase.daoAccessReceipt().insertOnlySingleReceipt(receipts);
    Log.d(RECEIPT_SERVICE_LOG, "Inserted In Database AddNewReceipt");
    fetchReceiptData(receipts);
    Log.d(RECEIPT_SERVICE_LOG, "Fetch Data To List AddNewReceipt");

    isDone = true;
    Log.d(RECEIPT_SERVICE_LOG, "ISDONE IS TRUE - ADD_NEW_RECEIPT");
}

Error Stack Trace

private Bitmap createRotateAndScaleBitmap(String filePath) {

    Matrix matrix = new Matrix();
    Log.d(RECEIPT_SERVICE_LOG, "Matrix Called");
    matrix.postRotate(90);
    Log.d(RECEIPT_SERVICE_LOG, "Matrix Rotated");
    Bitmap receiptBitmap = BitmapFactory.decodeFile(filePath);
    Log.d(RECEIPT_SERVICE_LOG, "File Decoded");
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(receiptBitmap, 1280, 960, false);
    Log.d(RECEIPT_SERVICE_LOG, "Bitmap Scaled");
    Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, false);
    Log.d(RECEIPT_SERVICE_LOG, "Bitmap Rotated");

    return rotatedBitmap;
}

0 Answers0