Здесь я успешно добавил слайдер изображений базы данных Firebase в реальном времени, который извлекает изображения и показывает их в слайдере изображений. Все работает нормально Все обновления изображений и все. За исключением случаев, когда я удаляю дочерний узел в моей базе данных Firebase в реальном времени, приложение вылетает.
Домашний фрагмент
public class HomeFragment extends Fragment {
DatabaseReference databaseReference;
List<ImageSliderModel> slideLists;
SliderView sliderView;
int TotalCounts;
public HomeFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
databaseReference = FirebaseDatabase.getInstance().getReference();
slideLists = new ArrayList<>();
sliderView = view.findViewById(R.id.imageSlider);
FirebaseDatabase.getInstance().getReference("ImagesLinks").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
Long counts = dataSnapshot.getChildrenCount();
TotalCounts = counts.intValue();
sliderView.setSliderAdapter(new ImageSliderAdapter(getActivity(), TotalCounts));
sliderView.setIndicatorAnimation(IndicatorAnimations.WORM);
sliderView.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION);
sliderView.setAutoCycleDirection(SliderView.AUTO_CYCLE_DIRECTION_BACK_AND_FORTH);
sliderView.setIndicatorSelectedColor(Color.WHITE);
sliderView.setIndicatorUnselectedColor(Color.LTGRAY);
sliderView.setScrollTimeInSec(3);
sliderView.startAutoCycle();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return view;
}
}
XML КОД
<ViewFlipper
android:id="@+id/viewflipper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoStart="true"
android:flipInterval="2000">
<com.smarteist.autoimageslider.SliderView
android:id="@+id/imageSlider"
android:layout_width="match_parent"
android:layout_height="200dp"
app:sliderAutoCycleDirection="back_and_forth"
app:sliderIndicatorAnimationDuration="600"
app:sliderIndicatorGravity="center_horizontal|bottom"
app:sliderIndicatorSelectedColor="#FFFFFFFF"
app:sliderIndicatorUnselectedColor="#FFCCCCCC"
app:sliderScrollTimeInSec="3"
app:sliderStartAutoCycle="true" />
</ViewFlipper>
Адаптер слайдера изображений
public class ImageSliderAdapter extends SliderViewAdapter<SliderviewHolder> {
Context context;
int setTotalCount;
String ImageLink;
public ImageSliderAdapter(Context context, int setTotalCount) {
this.setTotalCount = setTotalCount;
this.context = context;
}
@Override
public SliderviewHolder onCreateViewHolder(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.slider_item_layout,parent,false);
return new SliderviewHolder(view) ;
}
@Override
public void onBindViewHolder(final SliderviewHolder viewHolder, final int position) {
FirebaseDatabase.getInstance().getReference("ImagesLinks").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
switch (position){
case 0:
ImageLink = dataSnapshot.child("1").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 1:
ImageLink = dataSnapshot.child("2").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 2:
ImageLink = dataSnapshot.child("3").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 3:
ImageLink = dataSnapshot.child("4").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 4:
ImageLink = dataSnapshot.child("5").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 5:
ImageLink = dataSnapshot.child("6").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 6:
ImageLink = dataSnapshot.child("7").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 7:
ImageLink = dataSnapshot.child("8").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 8:
ImageLink = dataSnapshot.child("9").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
case 9:
ImageLink = dataSnapshot.child("10").getValue().toString();
Glide.with(viewHolder.itemView).load(ImageLink).into(viewHolder.sliderImageview);
break;
default:
return;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public int getCount() {
return setTotalCount;
}
}
class SliderviewHolder extends SliderViewAdapter.ViewHolder {
ImageView sliderImageview;
View itemView;
public SliderviewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
sliderImageview = itemView.findViewById(R.id.imageview02);
}
}
Модель слайдера изображения
public class ImageSliderModel {
String imageUrl;
public ImageSliderModel() {
}
public ImageSliderModel(String imageUrl){
this.imageUrl = imageUrl;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
Это все с исходным кодом. Примечание. Все значения в firebase root child обновляются правильно, кроме дочернего от узла root.
вот Крэ sh Отчет журнала
enter code here
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.demo.test, PID: 30101
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference
at com.demo.test.HomePage.ImageSliderAdapter$1.onDataChange(ImageSliderAdapter.java:50)
at com.google.android.gms.internal.zzegf.zza(Unknown Source:13)
at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source:2)
at com.google.android.gms.internal.zzeig.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6626)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'
Модель Firebase
![enter image description here](https://i.stack.imgur.com/ra38O.png)