android 从Firebase Storage获取映像

gdx19jrr  于 11个月前  发布在  Android
关注(0)|答案(4)|浏览(69)

我对整个Firebase存储概念还不熟悉。
我做了一点研究,发现了这个滑翔机。用于将图像添加到imageView。现在它给了我这个错误。
我该怎么补救?
还有别的办法吗

24 09:39:00.286 14919-14919/azcrew.eatapp E/AndroidRuntime: FATAL EXCEPTION: main
  Process: azcrew.eatapp, PID: 14919
  java.lang.IllegalArgumentException: Unknown type class com.google.firebase.storage.StorageReference. You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class
    at com.bumptech.glide.RequestManager.loadGeneric(RequestManager.java:629)
    at com.bumptech.glide.RequestManager.load(RequestManager.java:598)
    at azcrew.eatapp.halfdone.Cari$2.onSuccess(Cari.java:76)
    at azcrew.eatapp.halfdone.Cari$2.onSuccess(Cari.java:73)
    at com.google.android.gms.tasks.zzj.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:155)
    at android.app.ActivityThread.main(ActivityThread.java:5696)
    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:1028)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

字符串
这里是代码

StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
final StorageReference imgRef = mStorageRef.child("images/img.jpg");
final long ONE_MEGABYTE = 1024*1024;

imgRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
    @Override
    public void onSuccess(byte[] bytes) {
        Glide.with(Cari.this).load(imgRef).diskCacheStrategy(DiskCacheStrategy.ALL).into(kuryerImg);
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {

    }
});

nbysray5

nbysray51#

使用FirebaseImageLoader

Glide.with(this /* context */)
    .using(new FirebaseImageLoader())
    .load(storageReference)
    .into(imageView);

字符串

6yjfywim

6yjfywim2#

我有另一个办法来解决这个问题。
你可以得到图片的下载地址。这是谷歌指南中的代码。

StorageReference storageRef = 
  FirebaseStorage.getInstance().getReference();    
 storageRef.child("users/me/profile.png").getDownloadUrl()
.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
    // Got the download URL for 'users/me/profile.png'
    })
.addOnFailureListener(new OnFailureListener() {
  @Override
  public void onFailure(@NonNull Exception exception) {
    // Handle any errors
   }
});

字符串
如果你需要一个指南来下载图像到你的设备上,这里有一个Stackoverflow链接:Download Image from URL

vvppvyoh

vvppvyoh3#

使用通用加载器,而不是使用滑翔,它加载图像比滑翔快

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
        .cacheOnDisc(true).cacheInMemory(true)
        .imageScaleType(ImageScaleType.EXACTLY)
        .displayer(new FadeInBitmapDisplayer(300)).build();

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
        getApplicationContext())
        .defaultDisplayImageOptions(defaultOptions)
        .memoryCache(new WeakMemoryCache())
        .discCacheSize(100 * 1024 * 1024).build();

ImageLoader.getInstance().init(config);

final ImageLoader imageLoader = ImageLoader.getInstance();

final DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
        .cacheOnDisc(true).resetViewBeforeLoading(true)
        .showImageForEmptyUri(R.mipmap.preview)
        .showImageOnFail(R.mipmap.preview)
        .build();

 mdatabase.child(Table_item).addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Map map = (Map) dataSnapshot.getValue();
        String image1 = (String) map.get("imagename");
        String image2 = (String) map.get("image2name");
        imageLoader.displayImage(ImageView1, image1, options, new ImageLoadingListener() {

            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                progressBar.setVisibility(View.GONE);
            }
        });
        imageLoader.displayImage(ImageView2, image2name, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                i++;
                progressstatus(i);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                progressBar.setVisibility(View.GONE);

            }
        });

字符串
使用以下depth:

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

ui7jx7zq

ui7jx7zq4#

StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
                final StorageReference imgRef = mStorageRef.child("/images/"+"sea");//sea is my imageName.No, need to addextension

                imgRef.getDownloadUrl().addOnSuccessListener(uri -> {
                    Picasso.get().load(uri).into(profilePicture);
                }).addOnFailureListener(exception -> {
                    Log.d("error===========",exception.getMessage());
                });

字符串

相关问题