У меня есть курсор, читающий базу данных SQLite и получающий много столбцов, я храню эти столбцы во многих массивах.
private ArrayList<String> column1,column2,column3,column4, ... column n;
public getCursorData(Cursor cursor){
if (cursor.moveToFirst()){
do{
column1.add(Cursor.getString("column1"));
column2.add(Cursor.getString("column2"));
column3.add(Cursor.getString("column3"));
column4.add(Cursor.getString("column4"));
...
columnn.add(Cursor.getString("columnN"));
}while(cursor.moveToNext());
}
}
Я ищу способ хранить их в одном объекте (или массиве, или списке, или что-то еще), но я не могу понять, как это сделать
private Object[] object;
public getCursorData(Cursor cursor){
if (cursor.moveToFirst()){
int i=0;
do{
for(int f=0;f<cursor.getColumnCount();f++){
object[i].put(cursor.getColumnName(i), cursor.getString(i)); // I don't know what I am doing!
}
i++;
}while(cursor.moveToNext());
}
}
Другая попытка использования массивов, где каждый столбец представляет собой целое число.
private String[][] data;
public getCursorData(Cursor cursor){
if (cursor.moveToFirst()){
int i=0;
do{
for(int f=0;f<cursor.getColumnCount();f++){
data[i][f]=cursor.getString(f); // this is line 30
}
i++;
}while(cursor.moveToNext());
}
}
Эта последняя попытка не удалась, выдав следующую ошибку java.lang.NullPointerException: Attempt to read from null array в строке 30 (я отметил эту строку в комментарии к коду)




Я думаю, вы можете создать пользовательский объект для сопоставления этих значений. Что-то вроде:
public class TableData {
public String mColumn1;
public String mColumn2;
public String mColumn3;
public String mColumn4;
public String mColumn5;
}
public ArrayList<TableData> getCursorData(Cursor cursor) {
ArrayList<TableData> resultList = new ArrayList();
if (cursor.moveToFirst()){
do{
TableData row = new TableData();
row.mColumn1 = Cursor.getString("column1");
row.mColumn2 = Cursor.getString("column2");
row.mColumn3 = Cursor.getString("column3");
...
resultList.add(row);
} while(cursor.moveToNext());
}
return resultList;
}
Редактировать:
Если вы хотите сохранить свой подход, вам следует:
private String[][] data;
public void getCursorData(Cursor cursor) {
if (cursor.moveToFirst()) {
data = new String[cursor.getCount()][]; // You have to instantiate your bi-dimensional array
int i = 0;
do {
data[i] = new String[cursor.getColumnCount()];
for (int f = 0; f < cursor.getColumnCount(); f++) {
data[i][f] = cursor.getString(f);
}
i++;
} while (cursor.moveToNext());
}
}
Второй метод работает для меня, но мне также пришлось объявить длину второго измерения (data=new String[cursor.getCount()][8];), спасибо за вашу помощь.
Мне нравится эта идея, но есть ли способ избежать повторения
row.mColumnN = Cursor.getString("columnN");? делать для или карту или что-то? Я попробую второй способ и дам вам знать.