简体   繁体   English

如何从 Firebase 存储显示或获取图像

[英]How to display or get an image from Firebase storage

I'm new to Android and I have a problem upon displaying an image from FirebaseStorage.我是 Android 新手,在显示来自 FirebaseStorage 的图像时遇到问题。

This is my code in MainActivity.java :这是我在MainActivity.java代码:

ImageView image = (ImageView) findViewById(R.id.profilePic_image_view);

mStorage = FirebaseStorage.getInstance().getReference();
Uri downloadURI = mStorage.child("circleako.png").getDownloadUrl().getResult();

Picasso.with(MainActivity.this).load(downloadURI).fit().centerCrop().into(image);

Inside my gradle are these:在我的gradle里面是这些:

 compile 'com.google.firebase:firebase-database:10.0.1' compile 'com.google.firebase:firebase-storage:9.6.1' compile 'com.google.android.gms:play-services-base:10.0.1' compile 'com.google.android.gms:play-services-maps:10.0.1' compile 'com.google.android.gms:play-services-location:10.0.1' compile 'com.google.android.gms:play-services-analytics:10.0.1' compile 'com.squareup.picasso:picasso:2.5.2' testCompile 'junit:junit:4.12'

This is the error:这是错误:

01-19 16:35:09.998 7334-7334/com.example.asuspc.timeclock E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.asuspc.timeclock, PID: 7334
  java.lang.NoSuchMethodError: No static method zzy(Ljava/lang/Object;)Ljava/lang/Object;
  in class Lcom/google/android/gms/common/internal/zzac; or its super classes
  (declaration of 'com.google.android.gms.common.internal.zzac' appears in
  /data/data/com.example.asuspc.timeclock/files/instant-run/dex/slice-com.google.android.
  gms-play-services-basement-10.0.1_a22c13f35fb245022b215534e2f1b995cc0c66d1-classes.dex)
at com.google.android.gms.internal.zzann.zzug(Unknown Source)
at com.google.android.gms.internal.zzann.zzuf(Unknown Source)
at com.google.firebase.storage.StorageReference.child(Unknown Source)
at com.example.asuspc.timeclock.MainActivity.onCreate(MainActivity.java:198)
at android.app.Activity.performCreate(Activity.java:6323)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5451)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

You can to use Glide.您可以使用 Glide。 With Glide you can show animated gifs too.使用 Glide,您也可以显示动画 gif。

String urlImage = "You URL Image";

Glide.with(yourActivity.this)
        .load(urlImage)
        .into(yourImageView);

in gradle-app put:在 gradle-app 中输入:

compile 'com.github.bumptech.glide:glide:3.7.0'

Clean your project and do a full reinstall of the app on the device, it seems to be an issue with instant-run.清理您的项目并在设备上完全重新安装应用程序,这似乎是即时运行的问题。

Also, I'd recommend using Glide instead of Picasso with Firebase Storage (or cases where you load images from a URL).另外,我建议使用 Glide 而不是 Picasso 和 Firebase Storage(或从 URL 加载图像的情况)。 Picasso doesn't handle EXIF well, so in certain conditions it can cause issues such as orientation problems for images. Picasso 不能很好地处理 EXIF,因此在某些情况下它可能会导致诸如图像方向问题之类的问题。

EDIT:编辑:

mStorage.child("circleako.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        Picasso.with(MainActivity.this).load(uri).fit().centerCrop().into(image);
    }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM