0

I tried to recover four photos from firebase and display them in a slide show, retrieving the url's using getUrl().

However, the setSliderViews() method does not execute and I see this error:

FATAL EXCEPTION: main:"

How can I resolve this problem ?

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);
        }

    }

    }

This screen from lolcat describe error

ANDrDev
  • 1
  • 1

1 Answers1

1

the addListenerForSingleValueEvent does not execute right away so by the time your setSliderViews() is called the 'url' ArrayList is empty. you need to wait for the listener to execute.

Check out this thread: wait until firebase retrieves data

Matt
  • 138
  • 2
  • 8