Метод Array, возвращающий Array, только первое значение? - PullRequest
2 голосов
/ 19 ноября 2011

Я пытаюсь получить данные столбца из базы данных sqlLite и поместить эти данные в метод массива, а затем вызвать метод и отобразить данные, по какой-то причине я получаю только первую переменную в своем столбце, помогите пожалуйста !!!!

- Да, в этом столбце больше переменных

    public String[] getScore01() {

    String[] column1 = new String[] { KEY_NAME };
    Cursor c = ourDatabase.query(DATABASE_TABLE, column1, null, null, null,
            null, null);
    String[] result = {};

    int iName = c.getColumnIndex(KEY_NAME);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        String[] result1 = { "" + c.getString(iName) };

        result = result1.clone();
    }
    return result;
}

, и здесь мы вызываем метод и получаем данные, устанавливающие его в массив ...

        Database info = new Database(this);

    info.open();
    String[] data = info.getScore01().clone();
    info.close();

установка textview tvVVTEST на data [0] работает, но установка его на data [1] или что-то еще не получается, почему ???

        tvVVTEST.setText("" + data[0]); //works
      //tvVVTEST.setText("" + data[1]); // Does Not Work

Ответы [ 4 ]

2 голосов
/ 19 ноября 2011

Посмотрите на этот цикл:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

    String[] result1 = { "" + c.getString(iName) };

    result = result1.clone();
}
return result;

Вы устанавливаете result1 только для одного элемента массива, а затем result для клона этого массива. Поэтому result будет ссылаться только на одноэлементный массив. Я предлагаю вам использовать List<String> вместо:

List<String> results = new ArrayList<String>();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
    results.add(c.getString(iName));
}
return results;

(Измените свой метод, чтобы объявить, что он также возвращает List<String>.)

После этого вы сможете использовать

List<String> data = info.getScore01();
tvVVTest.setText(data.get(1)); // Assuming there *is* a second element

Кстати, вы, похоже, используете "" + x везде, где хотите строку. Это плохая идея, даже когда x не строка - используйте String.valueOf(x) вместо этого - но еще хуже, когда x - строка.

Вам также не нужно клонировать массивы (или списки) повсюду. Да, и вы должны поместить метод info.close() в блок finally, чтобы закрыть базу данных, даже если выдается исключение.

1 голос
/ 19 ноября 2011
info.open();
String[] data = info.getScore01().clone();
info.close();

Не нужно так звонить.Измените это на

info.open();
String[] data = info.getScore01();
info.close();

И вы объявили результат два раза. Во-вторых, убедитесь, что значение массива будет вставляться на новую позицию каждый раз. В противном случае оно будет перезаписано, и вы получите только одно значение

* 1006.* Отредактировано изменяется внутри цикла на
where you declare String [] result, Change to String []result=new String[c.getCount()];
 int i=0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

    result1[i] = c.getString(iName);
    i++;
}
return result;
0 голосов
/ 19 ноября 2011

, если вы можете использовать это для () синтаксиса этой новости для меня.Что произойдет, если вместо этого вы будете использовать цикл while?

while( c.moveToNext() ) { 
0 голосов
/ 19 ноября 2011

Добавьте следующее:

System.out.println(data.length);

Если он один, то, вероятно, в вашем массиве только один элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...