使用rawquery列表视图无法执行方法

时间:2015-12-28 09:50:54

标签: android sqlite listview cursor adapter

我有一个小问题,我不知道如何解决。 我有一个从我的数据库中获取数据的Cursor,如下所示:

public Cursor getAllData(){
    int id;
    SQLiteDatabase DB = this.getWritableDatabase();
    String dateTime = Helper.getCurrentDate();
    String date = dateTime.substring(0, 10);
    String date_to_look = date.substring(0, 10);
    String sql = "SELECT h.product_id, h.qty, h.date_time, p.product " +
            " FROM product_history h " +
            " LEFT JOIN products p ON (p.rowid = h.product_id) ";
    Cursor res = DB.rawQuery(sql, null);
    return res;
}

然后在我的活动中,我使用以下方法:

public void populateListView() {
      Cursor cursordata = myDb.getAllData();
      String productname = cursordata.getString(cursordata.getColumnIndex("product"));
       String [] products = {productname};    
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, products);
       ListView listviewman = (ListView)findViewById(R.id.listviewman);
       listviewman.setAdapter(adapter);

       }

使用onclick执行它:

public void shine(View v){
    Button shine = (Button)findViewById(R.id.shine);
    populateListView();
}

我做错了什么?

编辑: 仅显示表格中的最后一行。

public void populateListView() {
       Cursor cursordata = myDb.getAllData();

       if (cursordata.moveToFirst()) {
           do {
               String productname = cursordata.getString((cursordata.getColumnIndex("product")));
               String [] products = {productname};
               ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, products);
               ListView listviewman = (ListView)findViewById(R.id.listviewman);
               listviewman.setAdapter(adapter);

           } while (cursordata.moveToNext());
       }

Sahil这里是您使用的建议的更新版本,但它不起作用:

 public void populateListView() {
    Cursor cursordata = myDb.getAllData();
    List<String> li_records=new ArrayList<String>;

    if (cursordata.moveToFirst()) {
        do {
            String productname = cursordata.getString((cursordata.getColumnIndex("product")));
            String[] products = {productname};
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, products);
            ListView listviewman = (ListView) findViewById(R.id.listviewman);
            listviewman.setAdapter(adapter);
            li_records.add(productname);

        } while (cursordata.moveToNext());
    }
    String[] products=li_records.toArray();

}

2 个答案:

答案 0 :(得分:1)

尝试一下它会正常工作:

public void populateListView() {
       Cursor cursordata = myDb.getAllData();
            ArrayList<String> products = new ArrayList<>();

       if (cursordata.moveToFirst()) {
           do {
               String productname = cursordata.getString((cursordata.getColumnIndex("product")));
               products.add(productname);

           } while (cursordata.moveToNext());
       }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, products);
               ListView listviewman = (ListView)findViewById(R.id.listviewman);
               listviewman.setAdapter(adapter);
  }

答案 1 :(得分:0)

尝试放

cursordata.moveToFirst()

之后

List<String> li_records=new ArrayList<String>;
Cursor cursordata = myDb.getAllData();

像这样使用do while循环,

    // looping through all rows and adding to list
    if (cursordata.moveToFirst()) {
        do {
           String productname = c.getString((c.getColumnIndex("product")));
           li_records.add(productname);
        } while (cursordata.moveToNext());
    }
String[] products=li_records.toArray();

在适配器中使用此数组