Android 从Firebase存储api检索图像

Android 从Firebase存储api检索图像,android,firebase,firebase-storage,android-glide,Android,Firebase,Firebase Storage,Android Glide,我制作了一个从Firebase存储检索图像的应用程序。图像被检索并显示在imageview中,但检索图像需要2分钟以上。我已按照下面的链接从Firebase存储检索图像,Firebase存储也使用glide库 这是我的密码 MainActivity.java package com.example.vikas.where_i_am; import android.media.Image; import android.support.v7.app.AppCompatActivity; imp

我制作了一个从Firebase存储检索图像的应用程序。图像被检索并显示在imageview中,但检索图像需要2分钟以上。我已按照下面的链接从Firebase存储检索图像,Firebase存储也使用glide库

这是我的密码

MainActivity.java

package com.example.vikas.where_i_am;

import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;

public class MainActivity extends AppCompatActivity
{

    private ImageView imageView;
    private TextView mtext;
    private StorageReference mstorage,filepath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.action_image);
        mtext=(TextView)findViewById(R.id.text);

        mstorage= FirebaseStorage.getInstance().getReference().child("Screenshot (129).png");
        Glide.with(MainActivity.this)
                .using(new FirebaseImageLoader())
                .load(mstorage)
                .fitCenter()
                .centerCrop()
                .into(imageView);
    }
}
FirebaseImageLoader.java

package com.example.vikas.where_i_am;

/**
 * Created by vikas on 5/4/17.
 */


        import android.util.Log;

        import com.bumptech.glide.Priority;
        import com.bumptech.glide.load.data.DataFetcher;
        import com.bumptech.glide.load.model.stream.StreamModelLoader;
        import com.google.android.gms.tasks.Tasks;
        import com.google.firebase.storage.StorageReference;
        import com.google.firebase.storage.StreamDownloadTask;

        import java.io.IOException;
        import java.io.InputStream;

/**
 * ModelLoader implementation to download images from FirebaseStorage with Glide.
 *
 * Sample Usage:
 * <pre>
 *     StorageReference ref = FirebaseStorage.getInstance().getReference().child("myimage");
 *     ImageView iv = (ImageView) findViewById(R.id.my_image_view);
 *
 *     Glide.with(this)
 *         .using(new FirebaseImageLoader())
 *         .load(ref)
 *         .into(iv);
 * </pre>
 */
public class FirebaseImageLoader implements StreamModelLoader<StorageReference>
{

    private static final String TAG = "FirebaseImageLoader";

    @Override
    public DataFetcher<InputStream> getResourceFetcher(StorageReference model, int width, int height) {
        return new FirebaseStorageFetcher(model);
    }

    private class FirebaseStorageFetcher implements DataFetcher<InputStream> {

        private StorageReference mRef;
        private StreamDownloadTask mStreamTask;
        private InputStream mInputStream;

        FirebaseStorageFetcher(StorageReference ref) {
            mRef = ref;
        }

        @Override
        public InputStream loadData(Priority priority) throws Exception {
            mStreamTask = mRef.getStream();
            mInputStream = Tasks.await(mStreamTask).getStream();

            return mInputStream;
        }

        @Override
        public void cleanup() {
            // Close stream if possible
            if (mInputStream != null) {
                try {
                    mInputStream.close();
                    mInputStream = null;
                } catch (IOException e) {
                    Log.w(TAG, "Could not close stream", e);
                }
            }
        }

        @Override
        public String getId() {
            return mRef.getPath();
        }

        @Override
        public void cancel() {
            // Cancel task if possible
            if (mStreamTask != null && mStreamTask.isInProgress()) {
                mStreamTask.cancel();
            }
        }
    }
}
package com.example.vikas.where_i_am;
/**
*由vikas于2017年5月4日创建。
*/
导入android.util.Log;
导入com.bumptech.glide.Priority;
导入com.bumptech.glide.load.data.DataFetcher;
导入com.bumptech.glide.load.model.stream.StreamModelLoader;
导入com.google.android.gms.tasks.tasks;
导入com.google.firebase.storage.StorageReference;
导入com.google.firebase.storage.StreamDownloadTask;
导入java.io.IOException;
导入java.io.InputStream;
/**
*ModelLoader实现使用Glide从FirebaseStorage下载图像。
*
*示例用法:
* 
*StorageReference ref=FirebaseStorage.getInstance().getReference().child(“myimage”);
*ImageView iv=(ImageView)findViewById(R.id.my_image_view);
*
*用(这个)滑翔
*.使用(新的FireBaseMageLoader())
*.负载(参考)
*。加入第(iv)款;
* 
*/
公共类FirebaseImageLoader实现StreamModelLoader
{
私有静态最终字符串标记=“FirebaseImageLoader”;
@凌驾
公共数据获取程序getResourceFetcher(StorageReference模型、整型宽度、整型高度){
返回新的FirebaseStorageFetcher(型号);
}
私有类FirebaseStorageFetcher实现DataFetcher{
专用存储参考mRef;
私有流下载任务mStreamTask;
私有输入流mInputStream;
FirebaseStorageFetcher(StorageReference){
mRef=ref;
}
@凌驾
公共InputStream loadData(优先级)引发异常{
mStreamTask=mRef.getStream();
mInputStream=Tasks.await(mStreamTask.getStream();
返回mInputStream;
}
@凌驾
公共空间清理(){
//如果可能的话,关闭流程
if(mInputStream!=null){
试一试{
mInputStream.close();
mInputStream=null;
}捕获(IOE异常){
Log.w(标记“无法关闭流”,e);
}
}
}
@凌驾
公共字符串getId(){
返回mRef.getPath();
}
@凌驾
公开作废取消(){
//如果可能,取消任务
if(mStreamTask!=null&&mStreamTask.isInProgress()){
mStreamTask.cancel();
}
}
}
}
XML文件

    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);

                }
            });


有谁能帮我更快地检索图像。

使用UniversalLoader以更快地加载图像而不是glide它比glide更快地加载图像


使用UniversalLoader以更快的速度加载图像,而不是glide。它比glide更快地加载图像


发布您的代码以便我们可以查看?我已上载代码请查看。发布您的代码以便我们可以查看?我已上载代码请查看。
    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);

                }
            });