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?