Отображение набора результатов, возвращаемых курсором в EditText на Android - PullRequest
1 голос
/ 14 марта 2011

любезно помогите мне отладить или найти решение проблемы, с которой я столкнулся .. Здесь я пытаюсь прочитать все значения из таблицы в базе данных, используя объект Cursor.

Затем для определенного столбца, то есть UID (который является внешним ключом), я хочу отобразить все множественные записи строк.(сравнение UID с cur.getString (3))

Я использовал приведенный ниже код для отображения результата в TextView, но была некоторая задержка, с которой я столкнулся.

Результирующий набор не отображался сразу после вызова этого действия, однако после нескольких попыток повторного входа в систему он работал нормально.(мое приложение имеет форму входа в систему)

Поэтому я решил использовать TextView, который может отображать набор результатов по нажатию кнопки, однако активность завершается сбоем при нажатии кнопки.

package com.androidarun.mobilewallet;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class DisplayCCards extends Creditcard_Registration {


    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.creditcards_ui);
            final EditText view = (EditText) findViewById(R.id.displayarea);
           final StringBuilder ret = new StringBuilder(1000);        

            final MyDBAdapter db = new MyDBAdapter(getBaseContext()); 


            Button showcc = (Button) findViewById(R.id.showcc);  

            showcc.setOnClickListener(new OnClickListener() {


                @Override
                public void onClick(View v) {
                    Cursor cur = db.getAllCards();
                  cur.moveToFirst();

                  while (cur.isAfterLast() == false) {
                      if ( Integer.parseInt(cur.getString(3))== UID)
                          ret.append("Credit card number: " + cur.getString(1) + " \n" + 
                                  " CVV : " + cur.getString(2)+ " \n " + " Validity : " + cur.getString(4)+ " \n ");
                                        cur.moveToNext();
                  }
                  cur.close();
                  db.close();
                 view.setText(ret);




                }

            });

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

Вы можете использовать функцию cur.moveToNext в качестве условия while, а затем использовать cur.getString(1) и cur.getString(2) внутри цикла:

while (cur.moveToNext()) {
    Log.e("h", c1.getString(1));
    Log.e("h", c1.getString(2));
    Log.e("h", c1.getString(3));     
}
0 голосов
/ 14 марта 2011

Я думаю, что то, что вы пытаетесь сделать, должно иметь

 db.open();
 while (cur.isAfterLast() != false) {
                  if ( Integer.parseInt(cur.getString(3))== UID)
                      ret.append("Credit card number: " + cur.getString(1) + " \n" + 
                              " CVV : " + cur.getString(2)+ " \n " + " Validity : " +     cur.getString(4)+ " \n ");
                                    cur.moveToNext();
               }
 db.close();

, вы должны открывать и закрывать db каждый раз, когда пытаетесь получить к нему доступ.и пока должен иметь (cur.isAfterLast ()! = false

...