Android listView中的数据库结果不工作
我正在尝试从数据库中获取数据并将其呈现给listView。我的数据库使用两个类: 第一类是DBAdapter,我用于获取数据的方法是:Android listView中的数据库结果不工作,android,database,Android,Database,我正在尝试从数据库中获取数据并将其呈现给listView。我的数据库使用两个类: 第一类是DBAdapter,我用于获取数据的方法是: public String[] getData() { // String[] columns =new String[]{DBHelper.ROWID, DBHelper.TITLE , DBHelper.AUTHOR, DBHelper.ISBN }; String[] columns =new String[]{DBHelper.TIT
public String[] getData()
{
// String[] columns =new String[]{DBHelper.ROWID, DBHelper.TITLE , DBHelper.AUTHOR, DBHelper.ISBN };
String[] columns =new String[]{DBHelper.TITLE , DBHelper.AUTHOR, DBHelper.ISBN };
Cursor c=ourDatabase.query(DBHelper.DATABASE_TABLE, columns, null, null, null, null, null);
String result="";
String sa = null;
String sb = null;
String sc = null;
//int iRow=c.getColumnIndex(DBHelper.ROWID);
int is1=c.getColumnIndex(DBHelper.TITLE);
int is2=c.getColumnIndex(DBHelper.AUTHOR);
int is3=c.getColumnIndex(DBHelper.ISBN);
for (c.moveToFirst();!c.isAfterLast();c.moveToNext()){
//result=result+c.getString(is1)+" "+c.getString(is2)+" "+c.getString(is3)+"\n";
sa=c.getString(is1);
sb=c.getString(is2);
sc=c.getString(is3);
}
//Toast.makeText(HotOrNot.this, sa, Toast.LENGTH_SHORT).show();
return new String[] {sa,sb,sc};
}
2.SQLView中的secind类,这就是我试图创建列表的方式
public class SQLView extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
HotOrNot entry2=new HotOrNot(this);
entry2.open();
String[] data2=entry2.getData();
entry2.close();
Toast.makeText(SQLView.this, data2[1].toString(), Toast.LENGTH_SHORT).show();
ListView list = (ListView) findViewById(R.id.list);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map = new HashMap<String, String>();
map.put("name",data2[0].toString());
map.put("address", data2[1].toString());
map.put("address2", data2[2].toString());
mylist.add(map);
// ...
ListAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.row,
data2, new int[] {R.id.rtextView1,R.id.rtextView2,R.id.rtextView3});
list.setAdapter(mSchedule);
public类SQLView扩展活动{
/**首次创建活动时调用。*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list\u布局);
HotOrNot entry2=新HotOrNot(本);
entry2.open();
字符串[]data2=entry2.getData();
entry2.close();
Toast.makeText(SQLView.this,data2[1].toString(),Toast.LENGTH\u SHORT.show();
ListView列表=(ListView)findViewById(R.id.list);
ArrayList mylist=新的ArrayList();
HashMap=newHashMap();
map=新的HashMap();
map.put(“name”,data2[0].toString());
map.put(“地址”,data2[1].toString());
put(“address2”,data2[2].toString());
添加(地图);
// ...
ListAdapter mSchedule=new simpledapter(this,mylist,R.layout.row,
数据2,新int[]{R.id.rtextView1,R.id.rtextView2,R.id.rtextView3});
list.setAdapter(mSchedule);
为了工作我必须做什么?这是我第一次尝试在android中使用数据库
现在我只得到一个空的背景
编辑:
在我的祝酒辞中,我得到了我添加到db的位置1中的最后一项
有人能帮我处理一下DBHelper中的return语句吗?下面是固定的代码。试试这个
ListAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.row,
new String[] { "name", "address", "address2"},
new int[] {R.id.rtextView1,R.id.rtextView2,R.id.rtextView3});
list.setAdapter(mSchedule);
基本上,您必须指定您添加的映射的列/键。因此,它将键从映射映射映射到相应的视图
对于循环问题,这将完成以下工作:
for(int i=0; i<data2.length; i+=3) {
HashMap<String, String> map;
map = new HashMap<String, String>();
map.put("name",data2[i].toString());
map.put("address", data2[i+1].toString());
map.put("address2", data2[i+2].toString());
mylist.add(map);
}
首先,使用
ListActivity
作为基础,而不是Activity
。好吧,我更改了它!只是出于好奇,用Activity作为列表是错误的吗?我的意思是,我可以使用列表上方的图像,这样我只能使用Activity,对吗?你也可以在ListActivity
中使用图像。除了你之外没有任何限制视图层次结构中必须有ListView
。它将有一些帮助器API,您需要这些API来捕获用例,如单击某个项目等。这使您的生活变得轻松。谢谢havexz!!现在列表可以工作了,但我只能看到我在数据库中添加的最后一个项目!我如何解决它?这是在您调用mylist.add时发生的(映射);
仅一次…在本例中,这与最后一项相对应。您必须循环包含所有数据的data2
变量。您能在这方面给我一些帮助吗?我可以使用类似的吗?我真的很高兴您的帮助,但循环工作没有按照您建议的方式工作..:(.我只得到最后一项我的错误可能在DBHelper类中,这就是为什么我只得到最后一项?
ArrayList<String> arrForData = new ArrayList<String>();
//int iRow=c.getColumnIndex(DBHelper.ROWID);
int is1=c.getColumnIndex(DBHelper.TITLE);
int is2=c.getColumnIndex(DBHelper.AUTHOR);
int is3=c.getColumnIndex(DBHelper.ISBN);
for (c.moveToFirst();!c.isAfterLast();c.moveToNext()){
//result=result+c.getString(is1)+" "+c.getString(is2)+" "+c.getString(is3)+"\n";
arrForData.add(c.getString(is1));
arrForData.add(c.getString(is2));
arrForData.add(c.getString(is3));
}
//Toast.makeText(HotOrNot.this, sa, Toast.LENGTH_SHORT).show();
return arrForData.toArray();