Вывод результата sqlite-запроса в textview - PullRequest
0 голосов
/ 01 июля 2018

Я попытался вычислить отчет и отобразил результат в texview "edt1". Но это не отображается.

есть mydatabasehelper:

public void calculrapport(Argent a)
{
    db = this.getWritableDatabase();

    String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";

    Cursor cursor = db.rawQuery(query , null) ;
    int count = cursor.getCount();

        }

Вот мой класс Rapport.java:

public void onOKClick ( View v ) {

    if (v.getId() == R.id.okrapport) {

        EditText datedebut = (EditText) findViewById(R.id.datedebut);
        EditText datefin = (EditText) findViewById(R.id.datefin);

        String strdatedebut = datedebut.getText().toString();
        String strdatefin = datefin.getText().toString();

        Argent a = new Argent();
        helper.calculrapport(a);
      edt1.setText( );

    }

}

Заранее спасибо.

1 Ответ

0 голосов
/ 01 июля 2018

Предполагая, что запрос работает должным образом (, особенно учитывая, что используемые переменные имеют соответствующую область видимости, что вряд ли возможно, попробуйте использовать select sum(Entree) from Argent для тестирования без осложнений, могут ли разрешить переменные datedebut и datefin и, если это так, разрешите использование значений ), тогда вам нужно: -

Извлеките соответствующее значение и верните значение из метода, а затем используйте возвращенное значение для установки текста в TextView.

Чтобы вернуть значение, метод не должен быть пустым, а иметь соответствующий тип возврата (для примера будет использоваться строка),

  • поэтому вместо public void calculrapport(Argent a) используйте public String calculrapport(Argent a) (таким образом, для возврата строки потребуется метод)

  • Чтобы извлечь значение, курсор должен быть перемещен в соответствующую строку (должна быть только одна строка, так как функция sum является агрегатной функцией и существует только одна группа (агрегатные функции работают на gropus) т.е. все ряды)

Таким способом может быть: -

public String calculrapport(Argent a)
{
    String rv = "0"; //<<<< used to return 0 if no rows are selected by the query
    db = this.getWritableDatabase();
    String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";

    Cursor cursor = db.rawQuery(query , null) ;
    if (cursor.moveToFirst()) {
        rv = cursor.getString(0); //<<<< get the value from the 1st (only) column
    }
    cursor.close(); //<<<< Cursors should always be closed when done with
    return rv;
}

Чтобы установить TextView с возвращенным значением вместо использования: -

helper.calculrapport(a);
edt1.setText( );

Использование: -

edt1.setText(helper.calculrapport(a));

Или: -

String sum = helper.calculrapport(a);
edt1.setText(sum);

Дополнительный комментарий: -

Проблема находится в запросе SQlite (выберите сумму (Entree) из Серебряный, где дата между \ "datedebut \" и \ "datefin \";) точно когда мы называем «datedebut» и «datefin», что находится в классе rapport.java

Тогда String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";

разрешается до: -

select sum(Entree) from Argent where date between "datedebut" and "datefin" ;

Я полагаю, предполагая, что datedebut и datefin являются строковыми переменными, и что они находятся в допустимом формате даты SQLite, например это могут быть 2018-01-01 и 2018-02-01 (а значения в столбце даты отформатированы как допустимый формат даты SQLite), которые вы должны вместо этого использовать: -

String query = "select sum(Entree) from Argent where date between '" + datedebut + "' and '" + datefin +"' ;";

Что бы затем разрешить что-то вроде: -

SELECT sum(entree) FROM argent WHERE date BETWEEN '2018-01-01' AND '2018-02-01';

Для допустимых форматов даты SQLite; см. Функции даты и времени

  • Обратите внимание, что вышеприведенный код является принципиальным и не был проверен, поэтому может содержать некоторые простые ошибки при наборе.
...