Android Listview使用循环从SQL填充

时间:2015-05-30 07:02:34

标签: android listview

我尝试使用以下代码使用SQL数据库中的数据填充listview

    final DBAdapter db = new DBAdapter(this);
    db.open();  
    Cursor c = db.getAsset6("MARK BARR");
    int mx=1;
    String[] lvdata = new String[mx];


    while (c.moveToNext()) {
    lvdata[mx]=c.getString(1) + "-" + c.getString(2) + "-" + c.getString(6);
    mx++;
    }


    setListAdapter(new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, lvdata));
    getListView().setTextFilterEnabled(true);
    db.close(); 

当我运行应用程序崩溃时,我确定它与我在while循环中将数据添加到字符串然后设置适配器的方式有关但我无法解决我出错的地方

感谢任何帮助

标记

修改

确定以下工作现在可以正常但是当我到达最后一个listview条目时他的应用程序崩溃了

    final DBAdapter db = new DBAdapter(this);
    db.open();  
    Cursor c = db.getAsset6("MARK BARR");
    int mx=0;
    String[] lvdata = new String[c.getCount()];


    while (c.moveToNext()) {
    lvdata[mx]=c.getString(1) + "-" + c.getString(2) + "-" + c.getString(6);
    mx++;
    }
    // use your custom layout
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.rowlayout, R.id.label, lvdata);
    setListAdapter(adapter);
  }

1 个答案:

答案 0 :(得分:0)

好吧,我可能不配甚至打沃格拉的鞋子,但这是我怎么做的。我喜欢使用CursorAdapter,因为它允许你用图像做各种事情,我觉得它更容易。如果您不使用此功能,请在将来查看,因为您可能需要这样做。将其放在要查看数据的位置,无论是在onCreate还是从某个按钮被按下。

SQLiteDatabase sqLiteDatabase = controller.getReadableDatabase();

String query = "SELECT DISTINCT * FROM YOURTABLENAME";
Cursor cursor = sqLiteDatabase.rawQuery(query, null);

((ListView) YOURLISTVIEWNAME).setAdapter(new ANYNAMEADAPTER(context,
                    cursor, 0));

然后我们创建ANYNAMEADAPTER以将所有数据放入一个有组织的地方

 private static final class ANYNAMEADAPTER extends CursorAdapter {

    ANYNAMEADAPTER(Context context, Cursor cursor, int flags) {
        super(context, cursor, flags);

        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View v = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
        return v;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

    TextView theline = (TextView) view.findViewById(android.R.id.text1);
    String thedata =cursor.getString(1) + "-" + cursor.getString(2) + "-" + cursor.getString(6); 
    theline.setText(thedata);
    }

    LayoutInflater mInflater;
}