Android 从exisint sqlite数据库检索数据

Android 从exisint sqlite数据库检索数据,android,sqlite,listview,Android,Sqlite,Listview,我希望将其存储在arraylist中,然后在listView中显示出来。有什么解决办法吗?如何设置适配器?如何将这两个链接起来,并使用arrayList将其显示到listview中 DBhelper.java public ArrayList<String> getDataarray(){ SQLiteQueryBuilder querybuilder=new SQLiteQueryBuilder(); querybuilder.setTables(DATABA

我希望将其存储在arraylist中,然后在listView中显示出来。有什么解决办法吗?如何设置适配器?如何将这两个链接起来,并使用arrayList将其显示到listview中

DBhelper.java

public ArrayList<String> getDataarray(){


    SQLiteQueryBuilder querybuilder=new SQLiteQueryBuilder();
    querybuilder.setTables(DATABASE_TABLES);

  String [] columns= new String[]{ KEY_ROWID,KEY_USERNAME,KEY_AGE,KEY_ClINIC,KEY_PHONE,KEY_EMAIL,KEY_DATESIGNUP
            ,KEY_CONDITIONID,KEY_DOCTORID,KEY_LOGINID,KEY_ACTIVITYNAME,KEY_NOTIFICATIONNAME,KEY_GROUPNAME,KEY_APPROVED
            };

    Cursor c= ourdatabase.query(DATABASE_TABLES, columns, null,null, null, null, null);
    String result="";

    ArrayList<String> resultarray = new ArrayList<String>();


    int iRow=c.getColumnIndex(KEY_ROWID);
    int iUserName=c.getColumnIndex(KEY_USERNAME);
    int iAge=c.getColumnIndex(KEY_AGE);
    int iClinic=c.getColumnIndex(KEY_ClINIC);
    int iPhone=c.getColumnIndex(KEY_PHONE);
    int iEmail=c.getColumnIndex(KEY_EMAIL);
    int iDateSignup=c.getColumnIndex(KEY_DATESIGNUP);
    int iConditionID=c.getColumnIndex(KEY_CONDITIONID);
    int iDoctorID=c.getColumnIndex(KEY_DOCTORID);
    int iLoginID=c.getColumnIndex(KEY_LOGINID);
    int iActivityName=c.getColumnIndex(KEY_ACTIVITYNAME);
    int iNotificationName=c.getColumnIndex(KEY_NOTIFICATIONNAME);
    int iGroupName=c.getColumnIndex(KEY_GROUPNAME);
    int iApproved=c.getColumnIndex(KEY_APPROVED);


     SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT value FROM " + DATABASE_TABLES, null);

        if(cursor.moveToFirst()) {
            do {
                resultarray.add(cursor.getString(cursor.getColumnIndex("value")));
            }while(cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return resultarray;

}

是否要显示所有数据

考虑将
CursorLoader
SimpleCursorAdapter
一起使用。一旦在后台创建活动,它将加载您的数据。在activity类中,只需实现接口
LoaderManager.LoaderCallback
,在
onCreate
中,只需使用
getSupportLoaderManager()初始化Loader。initLoader(Loader_ID,null,this)
这是一个很好的例子

编辑:

此代码在onCreate中使用

    // init DB
    db = new DB(this);
    db.open();

    // forming columns from DB to views
    String[] from = new String[] { KEY_ROWID, KEY_USERNAME, KEY_AGE...}; //array of columns from DB
    int[] to = new int[] { R.id.textviewId, R.id.textviewUserName, R.id.textviewAge }; //Array of of view components

    // create adapter
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0);
    ListView lvData = (ListView) findViewById(R.id.lvData); // listview where you want to display data
    lvData.setAdapter(scAdapter);
//init loader
getSupportLoaderManager().initLoader(0, null, this);

//implement these mothods with interface `LoaderManager.LoaderCallback<Cursor>`

    @Override
      public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
        return new MyCursorLoader(this, db);
      }

      @Override
      public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        scAdapter.swapCursor(cursor);
      }

      @Override
      public void onLoaderReset(Loader<Cursor> loader) {
      }
}


增加了一个细节。这是一个从db下载数据并返回填充光标的类。

是的,我想显示所有数据。当我将数据放入onCreateView@WongJiaKit,什么样的错误?不应该。请再次检查或张贴日志
    // init DB
    db = new DB(this);
    db.open();

    // forming columns from DB to views
    String[] from = new String[] { KEY_ROWID, KEY_USERNAME, KEY_AGE...}; //array of columns from DB
    int[] to = new int[] { R.id.textviewId, R.id.textviewUserName, R.id.textviewAge }; //Array of of view components

    // create adapter
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0);
    ListView lvData = (ListView) findViewById(R.id.lvData); // listview where you want to display data
    lvData.setAdapter(scAdapter);
//init loader
getSupportLoaderManager().initLoader(0, null, this);

//implement these mothods with interface `LoaderManager.LoaderCallback<Cursor>`

    @Override
      public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
        return new MyCursorLoader(this, db);
      }

      @Override
      public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        scAdapter.swapCursor(cursor);
      }

      @Override
      public void onLoaderReset(Loader<Cursor> loader) {
      }
static class MyCursorLoader extends CursorLoader {

DB db;

public MyCursorLoader(Context context, DB db) {
  super(context);
  this.db = db;
}

@Override
public Cursor loadInBackground() {
  return db.getAllData();
}