通过Uri滑动加载本地图像.

Tud*_*uca 27 android android-glide

我正在尝试使用Glide从本地存储加载图像但没有成功.

Glide.with(mContext)
    .load(pictureUri) // Uri of the picture
    .transform(new CircleTransform(..))
    .into(profileAvatar);
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

java.lang.Exception: Failed to load model: '/storage/emulated/0/DCIM/Camera/IMG_20150831_180900.jpg'
at com.bumptech.glide.request.GenericRequest.onSizeReady(GenericRequest.java:441)
at com.bumptech.glide.request.target.ViewTarget$SizeDeterminer.getSize(ViewTarget.java:211)
at com.bumptech.glide.request.target.ViewTarget.getSize(ViewTarget.java:100)
at com.bumptech.glide.request.GenericRequest.begin(GenericRequest.java:272)
at com.bumptech.glide.manager.RequestTracker.resumeRequests(RequestTracker.java:83)
at com.bumptech.glide.RequestManager.resumeRequests(RequestManager.java:180)
at com.bumptech.glide.RequestManager.onStart(RequestManager.java:203)
at com.bumptech.glide.manager.ActivityFragmentLifecycle.onStart(ActivityFragmentLifecycle.java:50)
at com.bumptech.glide.manager.SupportRequestManagerFragment.onStart(SupportRequestManagerFragment.java:135)
at android.support.v4.app.Fragment.performStart(Fragment.java:1986)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1179)
at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1996)
at android.support.v4.app.FragmentController.dispatchStart(FragmentController.java:176)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:517)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
at android.app.Activity.performRestart(Activity.java:6063)
at android.app.Activity.performResume(Activity.java:6068)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2975)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud)

Tud*_*uca 96

在等待某人回复时,我试图从中创建一个File实例Uri并加载它.有用!奇怪的!

Glide.with(mContext)
    .load(new File(pictureUri.getPath())) // Uri of the picture
    .transform(new CircleTransform(..))
    .into(profileAvatar);
Run Code Online (Sandbox Code Playgroud)


TWi*_*Rob 13

如果你传递一个Uri实例它最好是兼容的,看起来你的实例没有架构(file://).

您可以检查如何Uri,String以及File模型加载揭穿古怪:)

  • 为了进一步混淆 Android 内置的无效编码陷阱,当您以编程方式使用内置图像选择器时,它会返回一个字符串“content://.....”,FileInputStream 和 File 都无法读取该字符串。Bitmapfactory.loadFile(uri) 会删除其中一个斜杠并授予 filenotfound 异常,因为该字符串(由 Bitmapfactory)转换为“content:/…,即一个斜杠。在操作系统中看到如此愚蠢的事情真是令人难过。 (3认同)

ale*_*dru 6

确保 Uri 来自文件。

Uri photoUri = Uri.fromFile( new File( preferences.getPhotoUrl()));

Glide.with(this).load( photoUri).into( civUserProfilePhoto);
Run Code Online (Sandbox Code Playgroud)


Raj*_*pan 6

如果它是文件路径,则可以直接传递。经过Glide 4.8.0测试

 Glide.with(context)
  .load(pictureUri.getPath())
  .transform(new CircleTransform(..))
  .into(profileAvatar);
Run Code Online (Sandbox Code Playgroud)


Anu*_*kar 5

就我而言,我在 Android 10 上运行 Emulator ,并且由于安全原因,disabled默认情况下是旧版外部存储访问,因此我在Androidmanifest文件中添加了以下代码

<application android:requestLegacyExternalStorage="true" 
.....
.....

</application>
Run Code Online (Sandbox Code Playgroud)

确保您已包含读取和写入外部存储的用户权限