Android — Курсор не работает должным образом

#android #sqlite #cursor

#Android #sqlite #курсор

Вопрос:

У меня есть приложение, которое вставляет данные в базу данных с 2 таблицами (project и alvara) Метод вставки для второй таблицы зависит от того, какой тип получает первая таблица. (1 или 2) для возобновления идеи.

Это метод, который я создал для просмотра второй таблицы с помощью курсора. Если он находит, он устанавливает параметры из класса alvara_db. И позже я использую методы получения для отображения информации о textviews в другом действии. Проблема в том, что это вообще не информация о настройке. Что-то не так с моим курсором?

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

 public ArrayList<alvara_db> getAlvaras(){
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<alvara_db> projects = new ArrayList<>();
    String[] project = new String[]{String.valueOf(tipoprojetoid)};

    Cursor cur = db.rawQuery("SELECT placa, proj_exec, resp_tec, rtnum, parecer FROM alvara WHERE projetoid = ?", project);
    cur.moveToFirst();

    alvara_db alvaras = new alvara_db();
    alvaras.setPlaca(cur.getInt(cur.getColumnIndex("placa")));
    alvaras.setProj_exec(cur.getInt(cur.getColumnIndex("proj_exec")));
    alvaras.setResp_tec(cur.getString(cur.getColumnIndex("resp_tec")));
    alvaras.setRtnum(cur.getInt(cur.getColumnIndex("rtnum")));
    alvaras.setParecer(cur.getString(cur.getColumnIndex("parecer")));
    projects.add(alvaras);

    return projects;
}
  

Фрагмент, где я вызываю метод getAlvaras:

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detalhes_projeto_alvara);
    db.getAlvaras();

    placa = alvaras.getPlaca();
    resp_tec = alvaras.getResp_tec();
    proj_exec = alvaras.getProj_exec();
    rtnum = alvaras.getRtnum();
}
  

Ответ №1:

Вы не используете возвращаемое значение из db.getAlvaras() .

Вместо этого alvaras переменная во втором фрагменте является чем-то, что, скорее всего, не инициализировано — опубликованный вами код не показывает этого точно.

(Кроме того, вы можете захотеть проверить возвращаемое значение moveToFirst() на случай, если запрос не соответствует ни одной строке, и добавить do while цикл для извлечения более одной строки.)

Комментарии:

1. @Iaalto 1- Да. Я это знаю. Я думал, что, просто установив информацию, полученную из базы данных, я мог бы получить ее в textviews. 2- Он инициализируется непосредственно перед onCreate. Извините, что не опубликовал это. 3- Я думаю, что в этом не будет необходимости, потому что он всегда будет возвращать только одну строку.

2. @Iaalto Могу ли я получить некоторую информацию о том, как использовать возвращаемое значение?

3. ArrayList<alvara_db> alvarasList = db.getAlvaras();

4. Я планирую поместить возвращаемые значения столбцов в предопределенную компоновку. Есть ли какой-либо способ сделать это с этим arraylist? возможно, используя ArrayAdapter?