我无法将从Firebase检索到的图像加载到viewpager中 [英] I can't load images retrieved from Firebase into a viewpager

查看:70
本文介绍了我无法将从Firebase检索到的图像加载到viewpager中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用Android应用程序将一些图像上传到Firebase存储中,现在我希望能够在同一应用程序的ViewPager中显示这些图像.我遵循了一个教程,在该教程中,他们在RecycleView中做了同样的事情,并试图在我的代码中应用同样的事情.现在,当我运行代码时似乎没有任何错误,但是我无法在imageView中查看图像.我需要有关ViewPagerAdapter代码的帮助,实例化方法中缺少某些内容,我不知道它是什么.

I have uploaded some images using an android application into Firebase storage, now I want to be able to display those images inside a ViewPager in that same application. I have followed a tutorial where they did the same thing but in a RecycleView, and tried to apply the same thing in my code. Now there seems to be no error when I run my code, but I can't view the images inside the imageView. I need help with my ViewPagerAdapter code please, something is missing on the instantiate method and I don't know what it is.

这是我的活动代码:

public class menuSliderActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private TextView textView;
    private DatabaseReference mDatabaseRef;
    List<SliderUtils> sliderImg;
    ViewPagerAdapter viewPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_slider);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        textView = (TextView) findViewById(R.id.textView);
        sliderImg = new ArrayList<>();
        mDatabaseRef= FirebaseDatabase.getInstance().getReference("Images");
        mDatabaseRef.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange( DataSnapshot dataSnapshot) {
            for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                SliderUtils sliderUtils = postSnapshot.getValue(SliderUtils.class);
                sliderImg.add(sliderUtils);
            }

            viewPagerAdapter = new ViewPagerAdapter(sliderImg, menuSliderActivity.this);
            viewPager.setAdapter(viewPagerAdapter);
       }

       @Override
       public void onCancelled( DatabaseError databaseError) {
           Toast.makeText(menuSliderActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();

       }
   });



    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new MyTimerTask(),2000,2000);}

public class MyTimerTask extends TimerTask{
    @Override
    public void run() {
        menuSliderActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(viewPager.getCurrentItem()==0){
                    viewPager.setCurrentItem(1);
                } else if (viewPager.getCurrentItem()==1){
                    viewPager.setCurrentItem(2);
                } else {
                    viewPager.setCurrentItem(0);
                }
            }
        });
    }


}

}

这是我的ViewPager适配器代码,我需要以下帮助:

And here is my ViewPager's adapter code which I need help with :

public class ViewPagerAdapter extends PagerAdapter {

    private Context context;
    private LayoutInflater layoutInflater;
    private List<SliderUtils> sliderImg;
    private ImageLoader imageLoader;
    private DatabaseReference mDatabaseRef;
    private ViewPager viewPager;
    private ImageView imageView;

    public ViewPagerAdapter(List<SliderUtils> sliderImg, Context context){

        this.sliderImg = sliderImg;
        this.context = context;
}


    @Override
    public int getCount() {
        return sliderImg.size();
}

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
}

    @Override
    public Object instantiateItem( ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.custom_layout, null);
        SliderUtils utils = sliderImg.get(position);
        ImageView imageView =  view.findViewById(R.id.imageView);
        //ADDED THIS HERE.                  
        Glide.with(context).load(utils.getImageUrl()).into(imageView);
        container.addView(view);
        return view;
}

    @Override
    public void destroyItem( ViewGroup container, int position,  Object object) {
       container.removeView((View) object);
}

}

我仍然无法将图像加载到viewpager中,我得到了一个确定的有效网址,但是图像没有消失,我只能看到设置的viewpager的背景.

I still can't get the images to load in my viewpager, I get a working url I made sure of that, but the images aren't disapled, I can only see the background of the viewpager which I have set.

推荐答案

您可以使用 Glide 来加载图像.现在,您还没有将图像加载到 image view 中,这就是为什么它无法正常工作的原因是代码...

You can use Glide to load the image. For now, you are not loading the image into image view that's why it's not working here is the code...

  @Override
public Object instantiateItem( ViewGroup container, int position) {
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.custom_layout, container, false);
    SliderUtils utils = sliderImg.get(position);
    ImageView imageView =  view.findViewById(R.id.imageView);

    // FIXED USING THIS
    Glide.with(context).load(**utils.getImageUrl**).into(imageView);
    container.addView(view);
    return view;
     }

编辑

此外,您需要将依赖项添加到gradle文件中

Also, you need to add the dependencies into your gradle file

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.9.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

这篇关于我无法将从Firebase检索到的图像加载到viewpager中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆