gpt4 book ai didi

java - 字符串数组问题的数组列表

转载 作者:行者123 更新时间:2023-11-30 02:49:23 25 4
gpt4 key购买 nike

我正在尝试从 Sqlite 上的数据库中获取数据。首先将行插入到 String[] 中,然后将 String[] 插入到 arraylist 中,最后返回 arraylist 以在其他类中使用它。

public ArrayList<String[]> getWeekUni() {
SQLiteDatabase db = helper.getWritableDatabase();

String[] columns = { MenuDataBase.SOPA, MenuDataBase.FONDO1,
MenuDataBase.REFRESCO, MenuDataBase.CALORIAS, };

ArrayList<String[]> weekdays = new ArrayList<String[]>();

String[] rowDay = new String[4];

Cursor cursor = db.query(MenuDataBase.TABLE_UNI, columns, null, null,
null, null, null);

while (cursor.moveToNext()) {
cursor.moveToNext();
int index1 = cursor.getColumnIndex(MenuDataBase.SOPA);
int index2 = cursor.getColumnIndex(MenuDataBase.FONDO1);
int index3 = cursor.getColumnIndex(MenuDataBase.REFRESCO);
int index4 = cursor.getColumnIndex(MenuDataBase.CALORIAS);
rowDay[0] = cursor.getString(index1);
rowDay[1] = cursor.getString(index2);
rowDay[2] = cursor.getString(index3);
rowDay[3] = cursor.getString(index4);

Log.d("TEST", rowDay[0]+" Get week");
Log.d("TEST", rowDay[1]+" Get week");

int i = 0;
weekdays.add(rowDay);

Log.d("TEST",Integer.toString(weekdays.size()));
Log.d("TEST", weekdays.get(i)[0].toString());
Log.d("TEST", weekdays.get(i)[1].toString());
i++;
}

Log.d("TEST", weekdays.get(0)[0].toString()+" weekdays");
Log.d("TEST", weekdays.get(0)[1].toString()+" weekdays");
Log.d("TEST", weekdays.get(3)[0].toString()+" weekdays");
Log.d("TEST", weekdays.get(3)[1].toString()+" weekdays");

db.close();
return weekdays;
}

我的日志猫是这样的:

06-28 10:54:44.160: D/TEST(13577): Semola Get week
06-28 10:54:44.160: D/TEST(13577): Garbanzos a la Americana Get week
06-28 10:54:44.160: D/TEST(13577): 1
06-28 10:54:44.160: D/TEST(13577): Semola
06-28 10:54:44.160: D/TEST(13577): Garbanzos a la Americana
06-28 10:54:44.160: D/TEST(13577): Juliana Get week
06-28 10:54:44.160: D/TEST(13577): Aeropuerto Get week
06-28 10:54:44.160: D/TEST(13577): 2
06-28 10:54:44.160: D/TEST(13577): Juliana
06-28 10:54:44.160: D/TEST(13577): Aeropuerto
06-28 10:54:44.160: D/TEST(13577): Chupe de Carne Get week
06-28 10:54:44.160: D/TEST(13577): Ajiaco con Hamburguesa de Casa Get week
06-28 10:54:44.160: D/TEST(13577): 3
06-28 10:54:44.160: D/TEST(13577): Chupe de Carne
06-28 10:54:44.160: D/TEST(13577): Ajiaco con Hamburguesa de Casa
06-28 10:54:44.160: D/TEST(13577): Moron Get week
06-28 10:54:44.160: D/TEST(13577): Trigo Guizado con Pollito al Horno Get week
06-28 10:54:44.160: D/TEST(13577): 4
06-28 10:54:44.160: D/TEST(13577): Moron
06-28 10:54:44.160: D/TEST(13577): Trigo Guizado con Pollito al Horno
06-28 10:54:44.160: D/TEST(13577): Crema de Verduras Get week
06-28 10:54:44.160: D/TEST(13577): Picante de Carne Get week
06-28 10:54:44.160: D/TEST(13577): 5
06-28 10:54:44.160: D/TEST(13577): Crema de Verduras
06-28 10:54:44.160: D/TEST(13577): Picante de Carne
06-28 10:54:44.160: D/TEST(13577): Crema de Verduras
06-28 10:54:44.160: D/TEST(13577): Picante de Carne weekdays
06-28 10:54:44.160: D/TEST(13577): Crema de Verduras weekdays
06-28 10:54:44.160: D/TEST(13577): Picante de Carne weekdays
06-28 10:54:44.170: D/TEST(13577): Crema de Verduras weekdays

这里的问题是,在 while 循环结束后,weekdays 对象设置它们的值,就好像它们都是一样的,你可以在我显示的最后一个日志中看到这一点

我真的不知道为什么会这样,我已经尝试过将 while 循环更改为 for 循环

最佳答案

进行了一些重构以使其正常工作。看看它:

您必须在每个循环中创建一个新对象,才能不更改列表中现有的对象。

public ArrayList<String[]> getWeekUni() {
SQLiteDatabase db = helper.getWritableDatabase();

String[] columns = { MenuDataBase.SOPA, MenuDataBase.FONDO1,
MenuDataBase.REFRESCO, MenuDataBase.CALORIAS, };

ArrayList<String[]> weekdays = new ArrayList<String[]>();



Cursor cursor = db.query(MenuDataBase.TABLE_UNI, columns, null, null,
null, null, null);

while (cursor.moveToNext()) {
// cursor.moveToNext(); //<-- You already did that one line above!!!!
String[] rowDay = new String[4]; //init here to create a new object and add it not to override existing object references!!!

int index1 = cursor.getColumnIndex(MenuDataBase.SOPA);
int index2 = cursor.getColumnIndex(MenuDataBase.FONDO1);
int index3 = cursor.getColumnIndex(MenuDataBase.REFRESCO);
int index4 = cursor.getColumnIndex(MenuDataBase.CALORIAS);
rowDay[0] = cursor.getString(index1);
rowDay[1] = cursor.getString(index2);
rowDay[2] = cursor.getString(index3);
rowDay[3] = cursor.getString(index4);

Log.d("TEST", rowDay[0]+" Get week");
Log.d("TEST", rowDay[1]+" Get week");

//int i = 0;
weekdays.add(rowDay);

Log.d("TEST",Integer.toString(weekdays.size()));
// not i to get last element, get last element with weekdays.size() - 1
Log.d("TEST", weekdays.get(weekdays.size() - 1)[0].toString());
Log.d("TEST", weekdays.get(weekdays.size() - 1)[1].toString());
// i++;
}

//To get All entries make it that way
for(String[] item : weekdays){
Log.d("TEST", "" + item[0]);
Log.d("TEST", "" + item[1]);
Log.d("TEST", "" + item[2]);
Log.d("TEST", "" + item[3]);
}

cursor.close();
db.close();

return weekdays;
}

关于java - 字符串数组问题的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24468614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com