Android 使用firebase的图像url制作幻灯片

Android 使用firebase的图像url制作幻灯片,android,firebase,url,arraylist,Android,Firebase,Url,Arraylist,我尝试从firebase恢复四张照片,并将它们显示在幻灯片中,使用getUrl()检索url 但是,setSliderViews()方法没有执行,我看到这个错误: 致命异常:主: 我如何解决这个问题 public class MainActivity extends AppCompatActivity { Upload data; ArrayList<String> url = new ArrayList<String>(); SliderLa

我尝试从firebase恢复四张照片,并将它们显示在幻灯片中,使用
getUrl()
检索url

但是,
setSliderViews()
方法没有执行,我看到这个错误:

致命异常:主:

我如何解决这个问题

public class MainActivity extends AppCompatActivity {


    Upload data;
    ArrayList<String> url = new ArrayList<String>();
    SliderLayout sliderLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sliderLayout = findViewById(R.id.imageSlider);

        sliderLayout.setIndicatorAnimation(SliderLayout.Animations.FILL); //set indicator animation by using SliderLayout.Animations. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!
        sliderLayout.setScrollTimeInSec(1); //set scroll delay in seconds :
        getUrl();
        setSliderViews();
    }
    private void  getUrl(){

        final ArrayList<String> mUrl = new ArrayList<String>();

        FirebaseDatabase.getInstance().getReference("upload").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    data = snapshot.getValue(Upload.class);

                    if (data != null) {
                        mUrl.add(data.getImageUrl());
                    }
                }
                url = mUrl;
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
    private void setSliderViews() {

        for (int i = 0; i <= 3; i++) {

            SliderView sliderView = new SliderView(this);
                switch (i) {
                    case 0:
                        sliderView.setImageUrl(url.get(0));
                        break;
                    case 1:
                        sliderView.setImageUrl(url.get(1));
                        break;
                    case 2:
                        sliderView.setImageUrl(url.get(2));
                        break;
                    case 3:
                        sliderView.setImageUrl(url.get(3));
                        break;
                }


            sliderView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
            //sliderView.setDescription(" " + (i + 1));
            final int finalI = i;
            sliderView.setOnSliderClickListener(new SliderView.OnSliderClickListener() {
                @Override
                public void onSliderClick(SliderView sliderView) {
                    Toast.makeText(MainActivity.this, "This is slider " + (finalI + 1), Toast.LENGTH_SHORT).show();
                }
            });

            //at last add this view in your layout :
            sliderLayout.addSliderView(sliderView);
        }

    }

    }
public类MainActivity扩展了AppCompatActivity{
上传数据;
ArrayList url=新的ArrayList();
滑块布局滑块布局;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sliderLayout=findViewById(R.id.imageSlider);
sliderLayout.setIndicatorAnimation(sliderLayout.Animations.FILL);//使用sliderLayout.Animations设置指示器动画:WORM或THIN\u WORM或COLOR或DROP或FILL或NONE或SCALE或SCALE\u DOWN或SLIDE和SWAP!!
sliderLayout.setScrollTimeInSec(1);//以秒为单位设置滚动延迟:
getUrl();
setSliderViews();
}
私有void getUrl(){
最终ArrayList mUrl=新ArrayList();
FirebaseDatabase.getInstance().getReference(“上载”).addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
data=snapshot.getValue(Upload.class);
如果(数据!=null){
add(data.getImageUrl());
}
}
url=mUrl;
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
私有void setSliderViews(){

对于(int i=0;i而言,
addListenerForSingleValueEvent
不会立即执行,因此在调用
setSliderViews()
时,“url”数组列表为空。您需要等待侦听器执行

查看此线程:

如果应用程序崩溃,则会出现堆栈跟踪。请在logcat上查找,并将其添加到您的问题中。您为什么大喊大叫?我不明白您的问题?