The issue is caused by:
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.example.proje.DetayActivity.onCreate(DetayActivity.java:78)
This page is where i add Viewpager to be shown on the activity. I think there is problem with the arraylist but it looks normal as i couldn't find any problem. Thank you for the help.
package com.example.proje;
imports..
public class DetayActivity extends AppCompatActivity {
ViewPager viewPager;
LinearLayout sliderDotspanel;
private int dotscount;
private ImageView[] dots;
private ArrayList<String> urls;
String key;
TextView txt1;
TextView txt2;
TextView txt3;
TextView txt4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detay);
setTitle("Detaylar");
txt1 = findViewById(R.id.txttarih);
txt2 = findViewById(R.id.txturunadi);
txt3 = findViewById(R.id.txtfiyati);
txt4 = findViewById(R.id.txtaciklama);
Intent intent = getIntent();
key = intent.getStringExtra("key");
urls = new ArrayList<>();
getdata();
viewPager = findViewById(R.id.viewPager);
sliderDotspanel = findViewById(R.id.SliderDots);
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this , urls);
viewPager.setAdapter(viewPagerAdapter);
dotscount = viewPagerAdapter.getCount();
dots = new ImageView[dotscount];
for (int i = 0; i < dotscount; i++) {
dots[i] = new ImageView(this);
dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.non_active_dot));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
sliderDotspanel.addView(dots[i], params);
}
dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot));
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for (int i = 0; i < dotscount; i++) {
dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.non_active_dot));
}
dots[position].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot));
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void getdata() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("urunler").child(key);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Urun urun = dataSnapshot.getValue(Urun.class);
txt1.setText(urun.getTarih());
txt2.setText(urun.getUrunAdi());
txt3.setText(Double.toString(urun.getFiyat()));
txt4.setText(urun.getAciklama());
urls.add(urun.getResim1());
urls.add(urun.getResim2());
urls.add(urun.getResim3());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
this page is the viewpager adapter
package com.example.proje;
imports..
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
private Integer [] images = {R.drawable.logo,R.drawable.doluredkalp,R.drawable.redheart};
private ArrayList<String> urls = new ArrayList<>();
public ViewPagerAdapter(Context context , ArrayList<String> urls) {
this.context = context;
this.urls = urls;
}
@Override
public int getCount() {
return urls.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
final String url = urls.get(position);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.layoutpager, null);
ImageView imageView = view.findViewById(R.id.imageView);
Picasso.get().load(url).placeholder(R.drawable.logo).into(imageView);
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
vp.removeView(view);
}
}
Your problem is in line
dotsarray is empty and when you trying to get element at index 0 you get this error because there is no element at index 0.Updated:
You can see that dots is an array with count equals
dotscount.dotscountvariable is count ofviewPagerAdapteritemsYou pass to viewPagerAdapter
urlsarray which is empty.That is the reason why you getting error
ArrayIndexOutOfBoundsExceptionI think you should create
dotsarray inonDataChangemethod after you populateurlsarray, this will fix this error