Преобразование Android.net.Uri в Java.io.inputStream

Я хочу передать изображение, взятое из галереи моего телефона, в мой java-код через Android Uri. Поскольку для Java.IO требуется URL-адрес файла или java или java inputStream, как я могу преобразовать Android Uri в inputStream?

Однако каждый раз я получаю исключение.

я пытался использовать этот код для преобразования imageUri данных моего изображения в inputStream. Я могу заверить вас, что imageUri имеет действительный контент, потому что я могу смотреть изображение в imageView. Также, возможно, если есть более простое преобразование в URL-адрес Java, у меня нет проблем с этим. Спасибо

    InputStream myimage = this.getContentResolver().openInputStream(imageUri);
      LoadImageApp Image = new LoadImageApp( myimage );```



//code that passes content to imageUri.It is working fine.
 protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);

         if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
             imageUri = data.getData();    
             imageView.setImageURI(imageUri);
         }
 }

трассировки стека

java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
        at android.view.View.performClick(View.java:4819)
        at android.view.View$PerformClick.run(View.java:20152)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:194)
        at android.app.ActivityThread.main(ActivityThread.java:5572)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
        at android.view.View.performClick(View.java:4819) 
        at android.view.View$PerformClick.run(View.java:20152) 
        at android.os.Handler.handleCallback(Handler.java:815) 
        at android.os.Handler.dispatchMessage(Handler.java:104) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5572) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763) 
     Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/imageio/ImageIO;
        at com.example.lib.LoadImageApp.<init>(LoadImageApp.java:66)
        at kostas.sgong.Main_Menu.onClickStart(Main_Menu.java:75)
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
        at android.view.View.performClick(View.java:4819) 
        at android.view.View$PerformClick.run(View.java:20152) 
        at android.os.Handler.handleCallback(Handler.java:815) 
        at android.os.Handler.dispatchMessage(Handler.java:104) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5572) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763) 
     Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.imageio.ImageIO" on path: DexPathList[[zip file "/data/app/kostas.sgong-1/base.apk", zip file "/data/app/kostas.sgong-1/split_lib_dependencies_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_0_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_1_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_2_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_3_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_4_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_5_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_6_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_7_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_8_apk.apk", zip file "/data/app/kostas.sgong-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at com.example.lib.LoadImageApp.<init>(LoadImageApp.java:66) 
        at kostas.sgong.Main_Menu.onClickStart(Main_Menu.java:75) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
        at android.view.View.performClick(View.java:4819) 
        at android.view.View$PerformClick.run(View.java:20152) 
        at android.os.Handler.handleCallback(Handler.java:815) 
        at android.os.Handler.dispatchMessage(Handler.java:104) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5572) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763) 
        Suppressed: java.lang.ClassNotFoundException: javax.imageio.ImageIO
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

«Однако каждый раз, когда я получаю исключение» - отредактируйте свой вопрос и опубликуйте трассировку стека. В противном случае мы не можем вам помочь, так как понятия не имеем, что происходит не так. Кроме того, откуда берется imageUri?

CommonsWare 06.04.2019 20:12

Извините, я новый разработчик. Публикация сейчас.

Mathew 06.04.2019 20:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/imageio/ImageIO;

Вы пытаетесь использовать класс Java, которого нет в Android. Поскольку ваше приложение скомпилировано, это, вероятно, происходит из какой-то библиотеки, которую вы используете, где эта библиотека не предназначена для использования на Android.

Спасибо за ответ. Но даже если я добавлю LoadImageApp в java-модуль в студии Android и настрою для работы с JDK?

Mathew 06.04.2019 22:40

@Mathew: у Android нет этого класса. Вы не можете изменить это.

CommonsWare 06.04.2019 22:48

Другие вопросы по теме