1

该问题是由以下原因引起的:

java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=0

在 com.example.proje.DetayActivity.onCreate(DetayActivity.java:78)

这个页面是我添加 Viewpager 以显示在活动中的地方。我认为arraylist有问题,但它看起来很正常,因为我找不到任何问题。感谢您的帮助。


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) {

            }
        });
}
}

此页面是 viewpager 适配器

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

    }
}
4

1 回答 1

1

你的问题是在线的

dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot));

dots数组为空,当您尝试获取索引 0 处的元素时,您会收到此错误,因为索引 0 处没有元素。

更新:

您可以看到 dots 是一个 count equals 的数组dotscount

dotscount变量是viewPagerAdapter项目数

您传递给urls空的 viewPagerAdapter 数组。

这就是您收到错误的原因ArrayIndexOutOfBoundsException

我认为您应该在填充数组后dots在方法中创建数组,这将解决此错误onDataChangeurls

于 2020-05-29T18:09:11.993 回答