Индекс элемента сетки для просмотра залпа Android не начинается с 0 - PullRequest
0 голосов
/ 14 ноября 2018

Я использую пользовательский адаптер gridview для показа изображений с залповым синглтоном. Сетка, показывающая изображения в порядке, просто, когда я нажимаю ПЕРВОЕ изображение, оно мгновенно падает.

Я пытался использовать URL-адреса [i-6], но он не возвращает нужную информацию. Есть 6 изображений, так или иначе индекс первого изображения равен 6, что вызывает исключение вне границы. Я попытался изменить биты кое-где, что могло бы привести к тому, что индекс начинался бы с 6, но безрезультатно.

Ошибка:

 java.lang.ArrayIndexOutOfBoundsException: length=6; index=6
                  at com.example.user.assignmentfourtwo.MainActivity$1$1.onItemClick(MainActivity.java:80)

Что это за строка:

Toast.makeText(MainActivity.this, URLS[i].toString(), Toast.LENGTH_LONG).show();

MainActivity.java:

public class MainActivity extends AppCompatActivity {

private final int THUMBNAIL_SIZE = 250;
private final String KEY = "IMAGE";
ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
private static final String URLS[] = {
    "http://10.0.2.2/Android%20A4_1/germany.png",
    "http://10.0.2.2/Android%20A4_1/indonesia.png",
    "http://10.0.2.2/Android%20A4_1/japan.png",
    "http://10.0.2.2/Android%20A4_1/sarawak.png",
    "http://10.0.2.2/Android%20A4_1/singapore.png",
    "http://10.0.2.2/Android%20A4_1/switzerland.png",
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    for(int i = 0; i<URLS.length; i++) {
        LoadingImages(URLS[i]);
    }
}

private void LoadingImages(String url) {
    ImageLoader imageLoader = MySingleton.getInstance(getApplicationContext()).getImageLoader();
    imageLoader.get(url, new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            Bitmap image = response.getBitmap();
            Bitmap thumbnail = ThumbnailUtils.extractThumbnail(image, THUMBNAIL_SIZE, THUMBNAIL_SIZE);
            bitmaps.add(thumbnail);

            GridView gridView = (GridView)findViewById(R.id.grid_layout);


            final ImageAdapter imageAdapter = new ImageAdapter(MainActivity.this, bitmaps);
            gridView.setAdapter(imageAdapter);


            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    Toast.makeText(MainActivity.this, URLS[i].toString(), Toast.LENGTH_LONG).show();
//                        Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
//                        intent.putExtra(KEY, URLS[i]);
//                        startActivity(intent);
                }
            });
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Do you even error?", error.getMessage());
        }
    });
}

}

MySingleton.java:

public class MySingleton {
private static MySingleton instance;
private RequestQueue requestQueue;
private ImageLoader imageLoader;
private static Context context;

private MySingleton(Context context){
    this.context = context;
    requestQueue = Volley.newRequestQueue(context);
    imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
        private final LruCache<String, Bitmap> cache = new LruCache<>(6);
        @Override
        public Bitmap getBitmap(String url) {
            Bitmap bmp = cache.get(url);
            if (bmp == null) {
                System.out.println("Not in cache");
            } else {
                System.out.println("In cache");
            }

            return bmp;
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            System.out.println("Put in cache");
            cache.put(url, bitmap);
        }
    });
}

public static synchronized MySingleton getInstance(Context context) {
    if (instance == null) {
        instance = new MySingleton(context);
    }
    return instance;
}

public ImageLoader getImageLoader() {
    return imageLoader;
}

}

ImageAdapter.java:

public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<Bitmap> bitmaps;
private final String KEY = "IMAGE";

public ImageAdapter(Context context, ArrayList<Bitmap> bitmaps) {
    this.mContext = context;
    this.bitmaps = bitmaps;
}

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

@Override
public Object getItem(int i) {
    return bitmaps.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {


    if (view == null) {
      final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
      view = layoutInflater.inflate(R.layout.griditems, null);
      MyViewHolder myViewHolder = new MyViewHolder(view);
      view.setTag(myViewHolder);
    }
    MyViewHolder myViewHolder = (MyViewHolder)view.getTag();
    myViewHolder.img.setImageBitmap(bitmaps.get(i));

    return view;
}

public class MyViewHolder {
   public ImageView img;

   public MyViewHolder(View view) {
       img = view.findViewById(R.id.image1);

   }


}

}

...