【问题标题】:How to load multiple images in ViewPager using Glide?如何使用 Glide 在 ViewPager 中加载多个图像?
【发布时间】:2017-10-26 17:19:39
【问题描述】:

首先我是Android开发的初学者,真的希望你们能帮助我。我想将 3 张图片从 Firebase 加载到可以滑动的查看器中。

我设法加载了 2 张图像并将其显示在 viewpager 上,但是当我尝试使用 Glide 和 Picasso 设置第三张图像时,应用程序崩溃了,并且在我使用时它指出“参数不能为空”滑翔,当我使用毕加索时,“目标不能为空”。我的图像大小约为 60kb。当我添加标签时,它显示所有图片都已从 Firebase 下载,但不知何故,第三张图片无法显示在 viewpager 上并导致应用程序崩溃。

下面是我的 ViewPagerAdapter。非常感谢您。

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import com.bumptech.glide.Glide;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;

public class ViewPagerAdapter extends PagerAdapter {

private Context context;
private LayoutInflater layoutInflater;
public static final String TAG_FRAGMENT = "FirebaseImageViewer";
private static final String TAG = "FirebaseImageViewer";
private DatabaseReference bannerReference;
private ImageView[] images = new ImageView[3];

public ViewPagerAdapter(Context context, DatabaseReference bannerReference) 
{
    this.context = context;
    this.bannerReference = bannerReference;

    bannerReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String image =(String)dataSnapshot.child("banner1").getValue();
            String image2 =(String)dataSnapshot.child("banner2").getValue();             
            String image3 =(String)dataSnapshot.child("banner3").getValue();



                       Glide.with(ViewPagerAdapter.this.context)
                       .asBitmap()
                       .load("image").into(images[0]); 

                       Glide.with(ViewPagerAdapter.this.context)
                      .asBitmap()
                      .load("image2")
                      .into(images[1]);  

                       Glide.with(ViewPagerAdapter.this.context)
                      .asBitmap()
                      .load("image3")
                      .into(images[2]);

                                         }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

}


@Override
public int getCount() {return images.length;
}

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

@Override
public Object instantiateItem(final ViewGroup container, final int position) {



    images[position] = new ImageView(ViewPagerAdapter.this.context);
    int padding = ViewPagerAdapter.this
            .context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
    images[position].setPadding(padding, padding, padding, padding);

    images[position].setScaleType(ImageView.ScaleType.FIT_XY);


    container.addView(images[position], position);
    return images[position];
}

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


}

下面是错误日志,

D/FirebaseImageViewer: image loaded 
https://firebasestorage.googleapis.com/v0/b/kahwin2-
6ca62.appspot.com/o/Banner_Contents%2Fkahwinmadeeasy.png?
alt=media&token=df1e45d9-c34b-45a5-b26f-fe4bbfffa7e4

D/FirebaseImageViewer: image loaded 
https://firebasestorage.googleapis.com/v0/b/kahwin2-
6ca62.appspot.com/o/Banner_Contents%2Fbanner2.png?alt=media&token=fa9757fa-
e734-4151-bb52-486d499c192d

D/FirebaseImageViewer: image loaded 
https://firebasestorage.googleapis.com/v0/b/kahwin2-
6ca62.appspot.com/o/Banner_Contents%2Fbanner3.png?alt=media&token=014ee8c4-
a600-4325-9cc5-87d8535805c9

W/Settings: Setting airplane_mode_on has moved from 
android.provider.Settings.System to android.provider.Settings.Global, 
returning read-only value.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.something.android.kahwinkahwin, PID: 6051
              java.lang.IllegalArgumentException: Target must not be null.
                  at 
com.squareup.picasso.RequestCreator.into(RequestCreator.java:618)
                  at 
com.squareup.picasso.RequestCreator.into(RequestCreator.java:601)
                  at com.something.android.kahwinkahwin.ViewPagerAdapter$1.
onDataChange(ViewPagerAdapter.java:52)
                  at com.google.android.gms.internal.
zzbpx.zza(Unknown Source)
                  at com.google.android.gms.internal.zzbqx.zzZV(Unknown 
Source)
                  at com.google.android.gms.internal.zzbra$1.run(Unknown 
Source)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.
main(ActivityThread.java:6334)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.
run(ZygoteInit.java:886)at com.android.internal.os.ZygoteInit.
main(ZygoteInit.java:776)

【问题讨论】:

  • 检查 image[2] 的值是否不为空
  • 很抱歉,如何查看值?顺便说一句,所有图片链接都是正确的。
  • 记录图像值并检查是否有任何一个为空
  • 第三张图片被声明为空。
  • 那么你将如何加载一个空图像:D

标签: android android-viewpager picasso android-glide


【解决方案1】:

好的,问题如下,您从 firebase 下载图像并将它们保存在 image 、 image2 和 image3 但是当您使用 glide 加载图像时,您将其传递给 banner 字符串而不是图像变量所以正确的解决方案是这样的

               Glide.with(ViewPagerAdapter.this.context)
               .asBitmap()
               .load(image).into(images[0]); 

               Glide.with(ViewPagerAdapter.this.context)
              .asBitmap()
              .load(image2)
              .into(images[1]);  

               Glide.with(ViewPagerAdapter.this.context)
              .asBitmap()
              .load(image3)
              .into(images[2]);

【讨论】:

  • 对不起,Ahmed 先生,我在 StackOverflow 中输入了错误的代码,实际上我写的和你上面写的一样。因此,它仍然声明为 null。
  • 啊我读到你的错误问题是图像视图尚未绘制所以它是空的,你不能将图像加载到空对象中我认为你应该以另一种方式来做
【解决方案2】:

我设法通过使用 MidasLefko 的建议解决了这个问题,即设置 setOffScreenPageLimit(3)。默认为 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多