我正在使用我们位于导航抽屉中的一个片段上的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下载的图像在打开片段时不断崩溃 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)