Android listView中的数据库结果不工作

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

我正在尝试从数据库中获取数据并将其呈现给listView。我的数据库使用两个类: 第一类是DBAdapter,我用于获取数据的方法是:

   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();