java-在片段上的GridView中显示从Firebase下载的图像在打开片段时不断崩溃

java-在片段上的GridView中显示从Firebase下载的图像在打开片段时不断崩溃,第1张

概述我正在使用我们位于导航抽屉中的一个片段上的GridView为我们的android应用创建图库.我为图像视图创建了一个自定义适配器,该适配器使用Picasso在图像视图中显示图像.我制作了一种名为DohvatiSlike()的方法,该方法从firebase下载图像并将其保存在File变量中.当我构建应用程序并运行它时,每当我从导航抽屉中打开图库时,应用程序都会

我正在使用我们位于导航抽屉中的一个片段上的GrIDVIEw为我们的android应用创建图库.我为图像视图创建了一个自定义适配器,该适配器使用Picasso在图像视图中显示图像.我制作了一种名为DohvatiSlike()的方法,该方法从firebase下载图像并将其保存在file变量中.当我构建应用程序并运行它时,每当我从导航抽屉中打开图库时,应用程序都会崩溃.如果我在onCreateVIEw中排除设置galleryGrIDAdapter的行,则不会崩溃,但显然不起作用.谁能帮我发现问题?

这是galleryFragment代码:

public class galleryFragment extends Fragment implements NavigationItem {private DatabaseReference mDatabaseRef;private List<file> slike;private int position;GrIDVIEw galleryGrIDVIEw;@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {    VIEw v = inflater.inflate(R.layout.gallery_fragment,container,false);    super.onCreateVIEw(inflater,savedInstanceState);    galleryGrIDVIEw = (GrIDVIEw)v.findVIEwByID(R.ID.gallery_grIDvIEw);    DohvatiSlike();    galleryGrIDVIEw.setAdapter(new galleryGrIDAdapter(getActivity(),slike));    return v;}public voID DohvatiSlike(){    mDatabaseRef=FirebaseDatabase.getInstance().getReference("images");    mDatabaseRef.addValueEventListener(new ValueEventListener() {        @OverrIDe        public voID onDataChange(DataSnapshot dataSnapshot) {            for(DataSnapshot postsnapshot: dataSnapshot.getChildren()){                file slika = postsnapshot.getValue(file.class);                slike.add(slika);            }        }        @OverrIDe        public voID onCancelled(DatabaseError databaseError) {            Toast.makeText((AppCompatActivity)getActivity(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();        }        });}@OverrIDepublic voID onAttach(Activity activity){    super.onAttach(activity);}@H_404_9@

这是适配器代码:

public class galleryGrIDAdapter extends BaseAdapter {private Context mContext;public List<file> slike;public galleryGrIDAdapter(Context context,List<file> slikice){    slike = slikice;    mContext = context;}@OverrIDepublic int getCount() {    return slike.size();}@OverrIDepublic Object getItem(int position) {    return slike.indexOf(position);}@OverrIDepublic long getItemID(int position) {    return 0;}@OverrIDepublic VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {    ImageVIEw imageVIEw;    if (convertVIEw == null) {        imageVIEw = new ImageVIEw(mContext);        imageVIEw.setLayoutParams(new GrIDVIEw.LayoutParams(500,500));        imageVIEw.setScaleType(ImageVIEw.ScaleType.CENTER_CROP);    } else{        imageVIEw = (ImageVIEw) convertVIEw;    }        Picasso.with(mContext).load(slike.indexOf(position)).into(imageVIEw);        return imageVIEw;}@H_404_9@

}

编辑*

这是崩溃日志

 Process: hr.foi.air1817.botanico,PID: 26065java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference    at hr.foi.air1817.botanico.adapters.galleryGrIDAdapter.getCount(galleryGrIDAdapter.java:26)    at androID.Widget.GrIDVIEw.setAdapter(GrIDVIEw.java:211)    at hr.foi.air1817.botanico.fragments.galleryFragment$1.onDataChange(galleryFragment.java:62)    at com.Google.firebase.database.obfuscated.zzap.zza(com.Google.firebase:firebase-database@@16.0.3:75)    at com.Google.firebase.database.obfuscated.zzca.zza(com.Google.firebase:firebase-database@@16.0.3:63)    at com.Google.firebase.database.obfuscated.zzcd$1.run(com.Google.firebase:firebase-database@@16.0.3:55)    at androID.os.Handler.handleCallback(Handler.java:873)    at androID.os.Handler.dispatchMessage(Handler.java:99)    at androID.os.Looper.loop(Looper.java:193)    at androID.app.ActivityThread.main(ActivityThread.java:6863)    at java.lang.reflect.Method.invoke(Native Method)    at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:858)@H_404_9@

我已经连续两天在这里工作了,只是无法正常工作,建议或想法受到赞赏最佳答案这是异步 *** 作的一个常见问题,您的代码将始终崩溃,因为在执行此 *** 作时,您需要先设置适配器数据,然后再从Firebase中获取适配器数据

DohvatiSlike();    galleryGrIDVIEw.setAdapter(new galleryGrIDAdapter(getActivity(),slike));@H_404_9@

方法DohvatiSlike();仍在请求数据,并且可能无法在您拥有的类似数组上添加元素.

而是在您的DohvatiSlike()中移动适配器的设置.方法

     public voID DohvatiSlike(){           slike = new List<>();                  mDatabaseRef = FirebaseDatabase.getInstance().getReference("images");                mDatabaseRef.addValueEventListener(new ValueEventListener() {                    @OverrIDe                    public voID onDataChange(DataSnapshot dataSnapshot) {                        for(DataSnapshot postsnapshot: dataSnapshot.getChildren()){                            file slika = postsnapshot.getValue(file.class);                            slike.add(slika);                        }                    galleryGrIDVIEw.setAdapter(new galleryGrIDAdapter(getActivity(),slike));                    }                    @OverrIDe                    public voID onCancelled(DatabaseError databaseError) {                        Toast.makeText((AppCompatActivity)getActivity(),Toast.LENGTH_SHORT).show();                    }                    });            }@H_404_9@

当执行DohvatiSlike()时,您将需要等待,具体取决于您的Internet连接以获取该数据,在获取数据之后,您将填充阵列,在这种情况下,您是在请求数据并立即用可能没有配置的数据设置适配器.尚未获取,而是只需在解析所有数据并将其添加到onDataChange内部之后再设置适配器.

另外,在显示视图时,请在onVIEwCreated()内进行 *** 作,因为onCreateVIEw()仅用于放大视图元素

总结

以上是内存溢出为你收集整理的java-在片段上的GridView中显示从Firebase下载的图像在打开片段时不断崩溃 全部内容,希望文章能够帮你解决java-在片段上的GridView中显示从Firebase下载的图像在打开片段时不断崩溃 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)