0

In my Android app, I need to pick image from gallery and do other processing. So I used a plugin to pick image. I used this plugin - https://android-arsenal.com/details/1/3466. Why I choose this plugin is because it can convert picked image uri to file. Then I do something with the file. But I am having a problem with that plugin.

I installed using Gradle

dependencies {
    compile 'com.mlsdev.rximagepicker:library:1.3.1'
    compile 'io.reactivex:rxjava:1.0.14'
}

Then I open picker like this in activity

private void openImagePicker()
    {


        RxImagePicker.with(ContributeActivity.this).requestImage(Sources.GALLERY)
                    .flatMap(new Func1<Uri, Observable<File>>() {
                        @Override
                        public Observable<File> call(Uri uri) {
                            return RxImageConverters.uriToFile(ContributeActivity.this, uri, new File(uri.getPath()));
                        }
                    })
                    .subscribe(new Action1<File>() {
                        @Override
                        public void call(File file) {
                            // Do something with your file copy
                            imageFile = file;
                            if(file==null)
                            {
                                Toast.makeText(getBaseContext(),"Unable to process file chosen",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
    }

As you can see above, I tried to convert uri to file. But in the first callback of picker, I have to pass file.

In this line (In the third parameter)

return RxImageConverters.uriToFile(ContributeActivity.this, uri, new File(uri.getPath()));

This function is silly because I want file. But it is asking me to pass file.

This is error when I run my code

08-22 02:00:00.823 19868-19868/mmbookhub.com.mmbookhub W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters: Error converting uri
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters: java.io.FileNotFoundException: /external/images/media/16: open failed: ENOENT (No such file or directory)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at libcore.io.IoBridge.open(IoBridge.java:409)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters.copyInputStreamToFile(RxImageConverters.java:62)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters.access$000(RxImageConverters.java:22)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:30)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:25)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.Observable.unsafeSubscribe(Observable.java:7710)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.lang.Thread.run(Thread.java:841)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:  Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at libcore.io.Posix.open(Native Method)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at libcore.io.IoBridge.open(IoBridge.java:393)
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters.copyInputStreamToFile(RxImageConverters.java:62) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters.access$000(RxImageConverters.java:22) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:30) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:25) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.Observable.unsafeSubscribe(Observable.java:7710) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
08-22 02:00:02.199 19868-21582/mmbookhub.com.mmbookhub E/RxImageConverters:     at java.lang.Thread.run(Thread.java:841) 
08-22 02:00:02.211 19868-19868/mmbookhub.com.mmbookhub W/EGL_genymotion: eglSurfaceAttrib not implemented
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime: FATAL EXCEPTION: main
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime: java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:60)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:730)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:525)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:  Caused by: rx.exceptions.OnErrorNotImplementedException: /external/images/media/16: open failed: ENOENT (No such file or directory)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.Observable$27.onError(Observable.java:7535)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:239)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:774)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:532)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:521)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:808)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:197)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:170)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:730) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5103) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:525) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:  Caused by: java.io.FileNotFoundException: /external/images/media/16: open failed: ENOENT (No such file or directory)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at libcore.io.IoBridge.open(IoBridge.java:409)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters.copyInputStreamToFile(RxImageConverters.java:62)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters.access$000(RxImageConverters.java:22)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:30)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:25)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.Observable.unsafeSubscribe(Observable.java:7710)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:  Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at libcore.io.Posix.open(Native Method)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at libcore.io.IoBridge.open(IoBridge.java:393)
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters.copyInputStreamToFile(RxImageConverters.java:62) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters.access$000(RxImageConverters.java:22) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:30) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at com.mlsdev.rximagepicker.RxImageConverters$1.call(RxImageConverters.java:25) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.Observable.unsafeSubscribe(Observable.java:7710) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
08-22 02:00:02.215 19868-19868/mmbookhub.com.mmbookhub E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841) 

It throws "file not found" exception because the third parameter is not valid. What is that File parameter? How can I correct my code?

halfer
  • 19,824
  • 17
  • 99
  • 186
Wai Yan Hein
  • 13,651
  • 35
  • 180
  • 372
  • File parameter is file name with location see [sample](https://github.com/MLSDev/RxImagePicker/blob/master/sample/src/main/java/com/mlsdev/sample/MainActivity.java) – Rajesh Oct 03 '16 at 14:33
  • I already solved the problem contacting to their development team. They sent me a simple project back and explained what it is. That file path is for temporary file path. – Wai Yan Hein Oct 04 '16 at 09:40
  • What I want to know is "temporary file path". – Wai Yan Hein Oct 04 '16 at 09:40
  • temporary file path is based on your application business logic Eg.If you using chat app that time store the image file in memory or etc, but any other kind of business application no need store app takeing picture that time use cache or app inside folder – Rajesh Oct 04 '16 at 09:47
  • But I am just asking about RxImagePicker. – Wai Yan Hein Oct 04 '16 at 11:41
  • Ya RxImagePicker ask only File (Where i have to write captured image) That one is user choice (Developer's ) – Rajesh Oct 04 '16 at 11:53

0 Answers0