如何从我的数据库中的数据,并把它放在一个ListView是可以点击的? [英] How to get data from my database and put it on a ListView that is clickable?

查看:129
本文介绍了如何从我的数据库中的数据,并把它放在一个ListView是可以点击的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想学习的SQLite 。我想从数据库中(的TextView )把信息发送到的ListView 是可点击(我还是不有想法可点击的ListView )。我能得到如何从我的数据库中的数据,并把它放在一个的ListView 是可以点击的一些帮助?下面是一个教程的网站,我想有一个的ListView 的code:

 按钮ViewBack;
@覆盖
保护无效的onCreate(包savedInstanceState){
    // TODO自动生成方法存根

    super.onCreate(savedInstanceState);
    的setContentView(R.layout.sqlview);

    ViewBack =(按钮)findViewById(R.id.bVBack);
    TextView的电视=(TextView中)findViewById(R.id.tvSQLinfo);
    ViewBack.setOnClickListener(本);

    HotOrNot信息=新HotOrNot(本);
    info.open();
    字符串数据= info.geData();
    info.close();
    tv.setText(数据);

}
@覆盖
公共无效的onClick(视图v){
    // TODO自动生成方法存根
    完();

}
 

sqlview.xml

 <滚动型
      机器人:layout_width =FILL_PARENT
      机器人:layout_height =match_parent>
<的TextView
    机器人:ID =@ + ID / tvSQLinfo
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:layout_marginTop =10dp
    机器人:文本=得到数据库信息/>
< /滚动型>
 

起初,我试图把这样的:

 的ListView LV =(ListView控件)findViewById(R.id.listMe);
ListAdapter listAD =新ListAdapter(这一点,R.id.listMe,电视);
 lv.setAdapter(listAD);
 

但我得到了不能实例化的数据类型 ListAdapter 的错误,所以我想关于更换 SimpleCursorAdapter 新ListAdapter(这一点,R.id.listMe,电视)

  ListAdapter listAD =新SimpleCursorAdapter(这一点,R.id.listMe,电视,NULL,NULL);
 

但它给了我又是一个错误,认为我改变强制转换为光标所以,我改变了这一切,直到它并没有给我任何错误。当我试图运行它,它不会工作。这里的 HotOrNotClass

 公共静态最后弦乐KEY_ROWID =_id;
公共静态最后弦乐KEY_NAME =persons_name;
公共静态最后弦乐KEY_HOTNESS =presons_hotness;

私有静态最后弦乐DATABASE_NAME =HotOrNotdb;
公共静态最后弦乐DATABASE_TABLE =peopleTable;
私有静态最终诠释DATABASE_VERSION = 1;

私人DbHelper ourHelper;
私人最终语境ourContext;
私人SQLiteDatabase ourDatabase;

私有静态类DbHelper扩展SQLiteOpenHelper {

    公共DbHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
        // TODO自动生成构造函数存根
    }


    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
        // TODO自动生成方法存根

        db.execSQL(CREATE TABLE+ DATABASE_TABLE +(+
                KEY_ROWID +INTEGER PRIMARY KEY AUTOINCREMENT,+
                KEY_NAME +TEXT NOT NULL,+
                KEY_HOTNESS +TEXT NOT NULL);
        );

    }

    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        // TODO自动生成方法存根
            db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE);
            的onCreate(DB);
    }

}
公共HotOrNot(上下文C){
    ourContext = C;
}

公共HotOrNot的open()抛出SQLiteException {
ourHelper =新DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();

回到这一点; }

公共无效的close(){
    ourHelper.close();
}

众长createEntry(字符串名称,字符串辣味){
    // TODO自动生成方法存根
    ContentValues​​ CV =新ContentValues​​();
    cv.put(KEY_NAME,姓名);
    cv.put(KEY_HOTNESS,辣味);
    返回ourDatabase.insert(DATABASE_TABLE,空,CV);

}

公共字符串geData(){
    // TODO自动生成方法存根
    的String []列=新的String [] {KEY_ROWID,KEY_NAME,KEY_HOTNESS};
    光标C = ourDatabase.query(DATABASE_TABLE,列,NULL,NULL,NULL,NULL,NULL);
    字符串结果=;
    INT iRow = c.getColumnIndex(KEY_ROWID);
    INT INAME = c.getColumnIndex(KEY_NAME);
    INT iHotness = c.getColumnIndex(KEY_HOTNESS);

    为(c.moveToFirst();!c.isAfterLast(); c.moveToNext()){
        结果=结果+ c.getString(iRow)++ c.getString(INAME)++ c.getString(iHotness)+\ N的;
    }
    返回结果;

}
公共字符串的getName(长L)抛出SQLiteException {
    // TODO自动生成方法存根
    的String []列=新的String [] {KEY_ROWID,KEY_NAME,KEY_HOTNESS};
    光标C = ourDatabase.query(DATABASE_TABLE,列,KEY_ROWID +=+ 1,NULL,NULL,NULL,NULL);
    如果(C!= NULL){
        c.moveToFirst();

        字符串名称= c.getString(1);
        返回名称;
    }
    返回null;
}

公共字符串getHotness(长L)抛出SQLiteException {
    // TODO自动生成方法存根
    的String []列=新的String [] {KEY_ROWID,KEY_NAME,KEY_HOTNESS};
    光标C = ourDatabase.query(DATABASE_TABLE,列,KEY_ROWID +=+ 1,NULL,NULL,NULL,NULL);
    如果(C!= NULL){
        c.moveToFirst();

        串辣味= c.getString(2);
        返回的辣味;
    }
    返回null;
}
 

解决方案

的getData()方法返回一个大的字符串所有的结果。我不认为这是你想为你的名单是什么,这样修改getData()方法,因此您可以返回字符串列表重presenting您的数据库记录

 公开的ArrayList<字符串> geData(){
    // TODO自动生成方法存根
    的String []列=新的String [] {KEY_ROWID,KEY_NAME,KEY_HOTNESS};
    光标C = ourDatabase.query(DATABASE_TABLE,列,NULL,NULL,NULL,NULL,NULL);
    ArrayList的<字符串>结果=新的ArrayList<字符串>();
    INT iRow = c.getColumnIndex(KEY_ROWID);
    INT INAME = c.getColumnIndex(KEY_NAME);
    INT iHotness = c.getColumnIndex(KEY_HOTNESS);

    为(c.moveToFirst();!c.isAfterLast(); c.moveToNext()){
        result.add(c.getString(iRow)++ c.getString(INAME)++ c.getString(iHotness));
    }
    返回结果;
}
 

为了显示一个列表,你必须把的ListView 元素在活动布局( sqlview ),所以你可以作出这样的布局:

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>

    <按钮
        机器人:ID =@ + ID / bVBack
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文本=东西/>

    <的ListView
        机器人:ID =@ + ID / listMe
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT/>

< / LinearLayout中>
 

然后在你的的onCreate()方法绑定的ListView 适配器

  // ...
ListView的LV =(ListView控件)findViewById(R.id.listMe);
HotOrNot信息=新HotOrNot(本);
info.open();
ArrayList的<字符串>数据= info.geData();
info.close();
lv.setAdapter(新ArrayAdapter<字符串>(这一点,android.R.layout.simple_list_item1,数据));
 

I'm trying to learn SQLite. I wanted to put the information from the database(TextView) to a ListView that is clickable(I still don't have idea in clickable ListView). Can I get some help on how to get data from my database and put it on a ListView that is clickable? Here is the code from a tutorial site that I wanted to have in a ListView:

Button ViewBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);
    setContentView(R.layout.sqlview);

    ViewBack=(Button) findViewById(R.id.bVBack);
    TextView tv = (TextView) findViewById(R.id.tvSQLinfo);
    ViewBack.setOnClickListener(this);

    HotOrNot info = new HotOrNot(this);
    info.open();
    String data = info.geData(); 
    info.close();
    tv.setText(data);

}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    finish();

}

sqlview.xml:

<ScrollView
      android:layout_width="fill_parent"
      android:layout_height="match_parent" >      
<TextView
    android:id="@+id/tvSQLinfo"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="10dp"
    android:text="get info from db" />
</ScrollView>

At first I tried putting this:

ListView lv = (ListView) findViewById(R.id.listMe);
ListAdapter listAD = new ListAdapter(this,R.id.listMe, tv);
 lv.setAdapter(listAD);

but I get an error that cannot instantiate the data type ListAdapter, so I tried replacing SimpleCursorAdapter on the new ListAdapter(this,R.id.listMe,tv):

ListAdapter listAD = new SimpleCursorAdapter (this,R.id.listMe,tv, null, null);

but it gives me again an error, it suggest that I change the cast to Cursor so, I changed all of it until it didn't give me any errors. When I tried to run it, it wouldn't work. Here's the HotOrNotClass:

public static final String KEY_ROWID= "_id"; 
public static final String KEY_NAME= "persons_name"; 
public static final String KEY_HOTNESS= "presons_hotness"; 

private static final String DATABASE_NAME= "HotOrNotdb";
public static final String DATABASE_TABLE= "peopleTable"; 
private static final int DATABASE_VERSION= 1;

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME + " TEXT NOT NULL, " +
                KEY_HOTNESS + " TEXT NOT NULL);"
        );  

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS " +DATABASE_TABLE);
            onCreate(db);
    }

}
public HotOrNot(Context c){
    ourContext=c;
}

public HotOrNot open() throws SQLiteException{
ourHelper = new DbHelper(ourContext);
ourDatabase =ourHelper.getWritableDatabase();

return this;  }

public void close(){
    ourHelper.close();
}

public long createEntry(String name, String hotness) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(KEY_NAME, name);
    cv.put(KEY_HOTNESS, hotness);
    return ourDatabase.insert(DATABASE_TABLE, null, cv);

}

public String geData() {
    // TODO Auto-generated method stub
    String[]columns=new String[]{ KEY_ROWID,KEY_NAME, KEY_HOTNESS};
    Cursor c =ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
    String result ="";
    int iRow=c.getColumnIndex(KEY_ROWID);
    int iName=c.getColumnIndex(KEY_NAME);
    int iHotness=c.getColumnIndex(KEY_HOTNESS);

    for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){
        result=result + c.getString(iRow)+" "+c.getString(iName)+" "+c.getString(iHotness)+"\n";
    }
    return result;

}
public String getName(long l) throws SQLiteException{
    // TODO Auto-generated method stub
    String[]columns=new String[]{ KEY_ROWID,KEY_NAME, KEY_HOTNESS};
    Cursor c= ourDatabase.query(DATABASE_TABLE, columns,  KEY_ROWID+"="+l, null, null, null, null);
    if (c!=null){
        c.moveToFirst();

        String name=c.getString(1);
        return name;
    }
    return null;
}

public String getHotness(long l)throws SQLiteException {
    // TODO Auto-generated method stub
    String[]columns=new String[]{ KEY_ROWID,KEY_NAME, KEY_HOTNESS};
    Cursor c= ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID+"="+l, null, null, null, null);
    if (c!=null){
        c.moveToFirst();

        String hotness=c.getString(2);
        return hotness;
    }
    return null;
}

解决方案

Your getData() method returns a big String with all the results. I don't think this is what you want for your list, so modify the getData() method so you can return a list of String representing your database records:

public ArrayList<String> geData() {
    // TODO Auto-generated method stub
    String[]columns=new String[]{ KEY_ROWID,KEY_NAME, KEY_HOTNESS};
    Cursor c =ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
    ArrayList<String> result = new ArrayList<String>();
    int iRow=c.getColumnIndex(KEY_ROWID);
    int iName=c.getColumnIndex(KEY_NAME);
    int iHotness=c.getColumnIndex(KEY_HOTNESS);

    for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){
        result.add(c.getString(iRow)+" "+c.getString(iName)+" "+c.getString(iHotness));
    }
    return result;
}

In order to show a list you'll have to put a ListView element in your Activity layout(sqlview) so you could make the layout like this:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/bVBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Something" />

    <ListView
        android:id="@+id/listMe"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Then in your onCreate() method bind the ListView to an Adapter :

//...
ListView lv = (ListView) findViewById(R.id.listMe);
HotOrNot info = new HotOrNot(this);
info.open();
ArrayList<String> data = info.geData(); 
info.close();
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item1, data));

这篇关于如何从我的数据库中的数据,并把它放在一个ListView是可以点击的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆