web-dev-qa-db-de.com

Lokales Bild von Gleiten laden durch Uri.

Ich versuche, Glide zu verwenden, um ein Image ohne Erfolg aus dem lokalen Speicher zu laden.

Glide.with(mContext)
    .load(pictureUri) // Uri of the picture
    .transform(new CircleTransform(..))
    .into(profileAvatar);

Dies ist der Fehler, den ich bekomme:

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)
22
Tudor Luca

Während ich auf eine Antwort gewartet habe, habe ich versucht, eine File-Instanz aus der Uri zu erstellen und diese zu laden. Es klappt! Seltsam!

Glide.with(mContext)
    .load(new File(pictureUri.getPath())) // Uri of the picture
    .transform(new CircleTransform(..))
    .into(profileAvatar);
85
Tudor Luca

Wenn Sie eine Uri-Instanz übergeben, ist die Konformität besser, es sieht so aus, als hätte Ihre Instanz kein Schema (file://).

Sie können überprüfen, wie Uri , String und File Modelle geladen werden, um die Ungewöhnlichkeit zu enträtseln :)

10
TWiStErRob

Wenn es sich um einen Dateipfad handelt, kann er direkt übergeben werden. Getestet mit Glide 4.8.0

 Glide.with(context)
  .load(pictureUri.getPath())
  .transform(new CircleTransform(..))
  .into(profileAvatar);
0

Stellen Sie sicher, dass der Uri aus der Datei stammt.

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

Glide.with(this).load( photoUri).into( civUserProfilePhoto);
0
alekshandru