将SQLite数据库中的数据显示到Android中的ListView中

虽然这里已经多次询问过这个问题,但我找不到合适的答案来适应我的代码。 我意识到这可能是一些小事,但我似乎无法找到问题,因为我只是对此非常陌生。

这是DatabaseHelper类中的代码getClientNames

public Cursor getSitesByClientname(String id) { String[] args={id}; Cursor myCursor = db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args); String results = ""; /*int count = myCursor.getCount(); String[] results = new String[count + 1]; int i = 0;*/ if (myCursor != null) { if(myCursor.getCount() > 0) { for (myCursor.moveToFirst(); !myCursor.isAfterLast(); myCursor.moveToNext()) { results = results + myCursor.getString(myCursor.getColumnIndex("client_sitename")); } } } return results; } 

一个问题是我正在向’Cursor’返回一个’String’,但我不确定这是什么最好的方法,因为我认为我应该返回一个Cursor。

这是我想要显示数据的ClientSites类:

 public class ClientSites extends Activity { //public final static String ID_EXTRA="com.example.loginfromlocal._ID"; private DBUserAdapter dbHelper = null; private Cursor ourCursor = null; private Adapter adapter=null; @SuppressWarnings("deprecation") @SuppressLint("NewApi") public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); setContentView(R.layout.client_sites); Intent i = getIntent(); String uID = String.valueOf(i.getIntExtra("userID", 0)); ListView myListView = (ListView)findViewById(R.id.myListView); dbHelper = new DBUserAdapter(this); //dbHelper.createDatabase(); dbHelper.openDataBase(); ourCursor = dbHelper.getSitesByClientname(uID); Log.e("ALERT", uID.toString()); startManagingCursor(ourCursor); Log.e("ERROR", "After start manage cursor: "); //@SuppressWarnings("deprecation") //SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.id.myListView, null, null, null); CursorAdapter adapter = new SimpleCursorAdapter(this, R.id.myListView, null, null, null, 0); adapter = new Adapter(ourCursor); //Toast.makeText(ClientSites.this, "Booo!!!", Toast.LENGTH_LONG).show(); myListView.setAdapter(adapter); myListView.setOnItemClickListener(onListClick); } catch (Exception e) { Log.e("ERROR", "XXERROR IN CODE: " + e.toString()); e.printStackTrace(); } } private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int position, long id) { Intent i=new Intent(ClientSites.this, InspectionPoints.class); i.putExtra(ID_EXTRA, String.valueOf(id)); startActivity(i); } }; class Adapter extends CursorAdapter { @SuppressWarnings("deprecation") Adapter(Cursor c) { super(ClientSites.this, c); } //@Override public void bindView(View row, Context ctxt, Cursor c) { Holder holder=(Holder)row.getTag(); holder.populateFrom(c, dbHelper); } @Override public View newView(Context ctxt, Cursor c, ViewGroup parent) { LayoutInflater inflater=getLayoutInflater(); View row = inflater.inflate(R.layout.row, parent, false); Holder holder=new Holder(row); row.setTag(holder); return(row); } } static class Holder { private TextView name=null; Holder(View row) { name=(TextView)row.findViewById(R.id.ingredientText); } void populateFrom(Cursor c, DBUserAdapter r) { name.setText(r.getName(c)); } } } 

这是我现在用来尝试在Listview中显示数据的代码。 我从原来的尝试中改变了一些,但仍然不确定我做错了什么。

 public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); //setContentView(R.layout.client_sites); Intent i = getIntent(); String uID = String.valueOf(i.getIntExtra("userID", 0)); //int uID = i.getIntExtra("userID", 0); //ListView myListView = (ListView)findViewById(R.id.myListView); dbHelper = new DBUserAdapter(this); dbHelper.createDatabase(); dbHelper.openDataBase(); String[] results = dbHelper.getSitesByClientname(uID); //setListAdapter(new ArrayAdapter(ClientSites.this, R.id.myListView, results)); //adapter = new ArrayAdapter(ClientSites.this, R.id.myListView, results); setListAdapter(new ArrayAdapter(ClientSites.this, R.layout.client_sites, results)); //ListView myListView = (ListView)findViewById(R.id.myListView); ListView listView = getListView(); listView.setTextFilterEnabled(true); //ourCursor = dbHelper.getSitesByClientname(uID); //Log.e("ALERT", uID.toString()); //startManagingCursor(ourCursor); //Log.e("ERROR", "After start manage cursor: "); //@SuppressWarnings("deprecation") //SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.id.myListView, null, null, null); // LOOK AT THIS IN THE MORNING!!!!!!!!!!! //CursorAdapter adapter = new SimpleCursorAdapter(this, R.id.myListView, null, null, null, 0); //adapter = new Adapter(ourCursor); //Toast.makeText(ClientSites.this, "Booo!!!", Toast.LENGTH_LONG).show(); //myListView.setAdapter(adapter); //myListView.setOnItemClickListener(onListClick); 

我从数据库创建了一个Listview。 这是我用于我的应用程序的代码

这是数据库处理程序的一部分。 它将返回我的列表视图的类别列表。 它可以返回一个字符串列表,如果这是你需要的。

 public List getAllCategorys() { ArrayList categoryList = new ArrayList(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_CATEGORY; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list try{ if (cursor.moveToFirst()) { do { Category category = new Category(); category.setID(Integer.parseInt(cursor.getString(0))); category.setCategory(cursor.getString(1)); // Adding category to list categoryList.add(category); } while (cursor.moveToNext()); } }finally{ cursor.close(); } db.close(); // return category list return categoryList; 

以下是我通过调用数据库来填充ListView的方法。

 int size = db.getCategoryCount(); List categoryList = db.getAllCategorys(); category_data = new String[size-1]; int i=0; for(Category cn : categoryList) { category_data[i] = cn.getCategory(); // get the name of the category and add it to array i++; } listAdapter = new ArrayAdapter(this, R.layout.categoryrow, category_data); listViw.setAdapter(listAdapter); 

编辑:这是适合你的东西

 public List getSitesByClientname(String id) { String[] args={id}; ArrayList result = new ArrayList(); SQLiteDatabase db = this.getWritableDatabase(); Cursor myCursor = db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args); try{ if (myCursor.moveToFirst()){ do{ result.add(myCursor.getString(myCusor.getString(myCursor.getColumnIndex("client_sitename")); }while(myCursor.moveToNext()); } }finally{ myCursor.close(); } db.close(); return result; } 

像这样使用它

 List sites_data = dbHelper.getSitesByClientname(uID); result_data = new String[sites_data.size()]; int i=0; for(String s : sites_data) { result_data[i] = s; // get the name of the category and add it to array i++; } listAdapter = new ArrayAdapter(this, R.layout.client_sites, result_data); listViw.setAdapter(listAdapter); 

如果你想从dbHelper返回Cursor,你可以做这样的事情……

 public Cursor getSitesByClientname(String id) { String[] args={id}; return db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args); } 

我还需要一些时间来阅读listview教程