Я пытаюсь сохранить Arraylist в моем методе SharedPreferences. Проблема я получаю, что мой индекс выходит за рамки, но я не понимаю, почему:Sharedpreferences error index за пределами
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
data = getSharedPreferences(filename,0);
SharedPreferences.Editor editor0 = data.edit();
editor0.putInt("shareddifficulty", difficulty);
editor0.putInt("sharedmoves", moves);
editor0.putInt("sharedpicture",resource);
editor0.putInt("ID_size", ID.size());
for(int i=0;i<ID.size();i++){
editor0.remove("ID_"+i);
editor0.putInt("ID_" + i, ID.get(i));
}
editor0.commit();
}
public void onResume(){
super.onResume();
data = getSharedPreferences(filename,0);
difficulty = data.getInt("shareddifficulty", 0);
moves = data.getInt("sharedmoves",0);
int listsize = data.getInt("ID_size", 0);
resource = data.getInt("sharedpicture", 0);
for(int i=0; i < listsize;i++){
ID.set(i,data.getInt("ID_" + i,0));
}
for(int i=0;i<listsize;i++){
crops.set(ID.get(i),cropsshuffle.get((ID.get(i))));
}
}
cropslist и список ID имеют одинаковый размер. Потому что это очень важно знать, как ArrayLists выглядеть я собираюсь показать коды для сельскохозяйственных культур и код ID:
культур:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), resource);
//Cropping the images and making a ID list that coincide with the cropped images.
divideImages(bmp);
с
private void divideImages(Bitmap bmp) {
int width = bmp.getWidth();
float w_ratio = (float) w/width;
int scaledwidth = (int) (bmp.getWidth()*w_ratio);
int scaledheight = (int) (bmp.getHeight()*w_ratio);
Bitmap scaledbmp = Bitmap.createScaledBitmap(bmp,scaledwidth,scaledheight,true);
switch(difficulty){
case 0:
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(i==2 && j==2){
Bitmap cropimage = Bitmap.createBitmap(scaledwidth/3,scaledheight/3,Bitmap.Config.ARGB_8888);
crops.add(cropimage);
cropimage = null;
}
else{
int startx = (int) ((scaledwidth*j)/3);
int starty = (int) ((scaledheight*i)/3);
Bitmap croppimage = Bitmap.createBitmap(scaledbmp,startx,starty,scaledwidth/3,scaledheight/3);
crops.add(croppimage);
croppimage = null;
}
}
grd.setNumColumns(3);
}
break;
case 1:
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i==3 && j==3){
Bitmap croppimage = Bitmap.createBitmap(scaledwidth/4,scaledheight/4,Bitmap.Config.ARGB_8888);
crops.add(croppimage);
croppimage = null;
}
else{
int startx = (int) ((scaledwidth*j)/4);
int starty = (int) ((scaledheight*i)/4);
Bitmap croppimage = Bitmap.createBitmap(scaledbmp,startx,starty,scaledwidth/4,scaledheight/4);
crops.add(croppimage);
croppimage = null;
}
}
grd.setNumColumns(4);
}
break;
case 2:
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(i==4 && j==4){
Bitmap croppimage = Bitmap.createBitmap(scaledwidth/5,scaledheight/5,Bitmap.Config.ARGB_8888);
crops.add(croppimage);
croppimage = null;
}
else{
int startx = (int) ((scaledwidth*j)/5);
int starty = (int) ((scaledheight*i)/5);
Bitmap croppimage = Bitmap.createBitmap(scaledbmp,startx,starty,scaledwidth/5,scaledheight/5);
crops.add(croppimage);
croppimage = null;
}
}
grd.setNumColumns(5);
}
break;
}
}
и для список ID:
private void getID(){
for(int i=0;i<crops.size();i++){
ID.add(i);
}
}
В моей GridView я есть onitemclicklistener, который меняет свои позиции, если поменять местами плитки сельскохозяйственных культур и удостоверения личности.
Вы также должны опубликовать инициализацию массивов и популяцию, с предоставленным кодом мы не можем быть уверены, что происходит – Leonardo
Это немного сложно сделать, потому что функция довольно длинная, вам нужно знать только одно: урожаи - это аррайалист растровых изображений, а идентификатор - это список с целыми числами и имеет тот же размер, что и урожай. –
Я могу поставить код так же хорошо, если вы действительно этого хотите? –