0

我正在为首次应用程序启动动态实现介绍屏幕。我通过 api 调用从服务器获取图像,我从服务器获取 5 张图像并加载到viewpager中。滑动到第五张图片时,应用程序崩溃并出现以下错误这是我的代码,

public class IntroScreenActivity extends AppCompatActivity {

    @BindView(R.id.view_pager)
    ViewPager mviewPager;
    @BindView(R.id.layoutDots)
    LinearLayout mLayoutDots;
    @BindView(R.id.skip)
    TextView mSkip;
    @BindView(R.id.next)
    TextView mNext;
    @BindView(R.id.progressBar)
    ProgressBar mProgressBar;

    private TextView[] dots;
    private SliderSharedPreferences sliderSharedPreferences;
    private ArrayList<String> introImageSlidersList;
    private int currentItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_introscreen);
        ButterKnife.bind(this);
        introImageSlidersList = new ArrayList<>();

         getIntroScreenImages();

        // Checking for first time launch - before calling setContentView()
        sliderSharedPreferences = new SliderSharedPreferences(this);
        if (!sliderSharedPreferences.isFirstTimeLaunch()) {
            launchHomeScreen();
            finish();
        }
        init();

        // adding bottom dots
        addBottomDots(0);

        mSkip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                launchHomeScreen();
            }
        });

        mNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // checking for last page
                // if last page home screen will be launched
                if (currentItem < introImageSlidersList.size() - 1) {
                    ++currentItem; // increase the value by 1
                    mviewPager.setCurrentItem(currentItem); // set the layout at next position
                } else {
                    launchHomeScreen();
                }
            }
        });
    }


    private void init() {
        for (int i = 0; i < introImageSlidersList.size(); i++)
            mviewPager.setAdapter(new SlidingImage_Adapter(this, introImageSlidersList));

        // Pager listener over indicator
        mviewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                currentItem = position; // currentItem used to get current position and then increase position on click on next button

                addBottomDots(position);

                if (position == introImageSlidersList.size() - 1) {
                    // last page. make button text to GOT IT
                    mSkip.setVisibility(View.GONE);
                } else {

                }
            }

            @Override
            public void onPageScrolled(int pos, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int pos) {

            }
        });

    }

    private int getItem(int i) {
        return mviewPager.getCurrentItem() + i;
    }

    public class SlidingImage_Adapter extends PagerAdapter {

        private ArrayList<String> imageList;
        private LayoutInflater inflater;
        private Context context;

        public SlidingImage_Adapter(Context context, ArrayList<String> imageList) {
            this.context = context;
            this.imageList = imageList;
            inflater = LayoutInflater.from(context);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

        @Override
        public int getCount() {
            return imageList.size();
        }

        @Override
        public Object instantiateItem(ViewGroup view, int position) {
            View imageLayout = inflater.inflate(R.layout.intro_slides, view, false);

            assert imageLayout != null;
            final ImageView imageView = (ImageView) imageLayout
                    .findViewById(R.id.image);
            Picasso.with(context).load(PawParentConstants.BASE_URL + introImageSlidersList.get(position)).fit().centerCrop().placeholder(R.drawable.pawsanta_logo).into(imageView);

            view.addView(imageLayout, 0);

            return imageLayout;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view.equals(object);
        }

        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }


    }


    private void addBottomDots(int currentPage) {
        dots = new TextView[introImageSlidersList.size()];

        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);
        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);
        Log.e("dots", String.valueOf(dots.length));
        Log.e("introImageSlidersList", String.valueOf(introImageSlidersList.size()));
        mLayoutDots.removeAllViews();
        for (int i = 0; i < dots.length; i++) {
            dots[i] = new TextView(this);
            dots[i].setText(Html.fromHtml("&#8226;"));
            dots[i].setTextSize(35);
            Log.e("currentPage", String.valueOf(currentPage));
            dots[i].setTextColor(colorsInactive[currentPage]);
            mLayoutDots.addView(dots[i]);
        }

        if (dots.length > 0)
            dots[currentPage].setTextColor(colorsActive[currentPage]);
    }

    private void launchHomeScreen() {
       Toast.makeText(getActivity(), "Launch home screen, Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onBackPressed() {
        finish();
        finishAffinity();
    }

    private void getIntroScreenImages() {

        if (NetworkConnectionMonitor.getInstance().isNetworkConnected()) {
            Call<JsonObject> call = PawParentConnect.getInstance(IntroScreenActivity.this).getApi().getIntroScreenSlider();

            call.enqueue(new Callback<JsonObject>() {
                @Override
                public void onResponse(@NonNull Call<JsonObject> call, @NonNull Response<JsonObject> response) {
                    if (response.isSuccessful() && response.body() != null) {
                        try {
                            JsonObject jsonObject = response.body().getAsJsonObject();
                            String status = jsonObject.get("status").getAsString();
                            switch (status) {
                                case "Success":
                                    JsonArray dataArray = jsonObject.getAsJsonArray("data");
                                    if (dataArray != null && dataArray.size() > 0) {
                                        Type listType = new TypeToken<List<JsonObject>>() {
                                        }.getType();
                                        final List<JsonObject> imageObjects = new Gson().fromJson(dataArray, listType);

                                        for (int i = 0; i < dataArray.size(); i++) {
                                            introImageSlidersList.add(imageObjects.get(i).get("path").getAsString());
                                        }
                                        init();
                                        addBottomDots(0);
                                    } else {

                                    }
                                    break;
                                case "Failure":
                                    Toast.makeText(IntroScreenActivity.this, R.string.try_again, Toast.LENGTH_SHORT).show();
                                    break;
                                default:
                                    Toast.makeText(IntroScreenActivity.this, R.string.try_again, Toast.LENGTH_SHORT).show();
                                    break;
                            }
                        } catch (Exception e) {
                            //Toast.makeText(getActivity(), R.string.try_again, Toast.LENGTH_SHORT).show();
                        }
                    }
                }

                @Override
                public void onFailure(@NonNull Call<JsonObject> call, @NonNull Throwable t) {
                    Toast.makeText(IntroScreenActivity.this, R.string.try_again, Toast.LENGTH_SHORT).show();
                }
            });
        } else {
            Toast.makeText(IntroScreenActivity.this, R.string.check_internet, Toast.LENGTH_SHORT).show();
        }
    }
}

java.lang.ArrayIndexOutOfBoundsException:长度=4;index=4 at com.slider.view.splash.IntroScreenActivity.addBottomDots(IntroScreenActivity.java:222) at com.slider.view.splash.IntroScreenActivity.access$300(IntroScreenActivity.java:46) at com.slider.view.splash .IntroScreenActivity$3.onPageSelected(IntroScreenActivity.java:128)

4

0 回答 0