建立了一个用户表,实现了注册功能,想在一个activity中把用户表的内容用列表的形式显示出来,应该怎么实现??
下面是我写好的类。
DatabaseHelper类:public class DatabaseHelper extends SQLiteOpenHelper {
static String name="user.db";
static int dbVersion=1;
public static final String TBL_NAME = "UserTbl";
public static final String COLUMN_NAME = "username";
public static final String COLUMN_PASS = "password";
public DatabaseHelper(Context context) {
super(context, name, null, dbVersion);
}
//只在创建的时候用一次
public void onCreate(SQLiteDatabase db) {
String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}User类:public class User implements Serializable{
private int id;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password, int age, String sex) {
super();
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}UserService类:public class UserService {
private DatabaseHelper dbHelper;
public UserService(Context context){
dbHelper=new DatabaseHelper(context);
}
//登录用
public boolean login(String username,String password){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="select * from user where username=? and password=?";
Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
return true;
}
return false;
}
//注册用
public boolean register(User user){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="insert into user(username,password) values(?,?)";
Object obj[]={user.getUsername(),user.getPassword()};
sdb.execSQL(sql, obj);
return true;
}
}
AndroidSQLite数据库
下面是我写好的类。
DatabaseHelper类:public class DatabaseHelper extends SQLiteOpenHelper {
static String name="user.db";
static int dbVersion=1;
public static final String TBL_NAME = "UserTbl";
public static final String COLUMN_NAME = "username";
public static final String COLUMN_PASS = "password";
public DatabaseHelper(Context context) {
super(context, name, null, dbVersion);
}
//只在创建的时候用一次
public void onCreate(SQLiteDatabase db) {
String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}User类:public class User implements Serializable{
private int id;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password, int age, String sex) {
super();
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}UserService类:public class UserService {
private DatabaseHelper dbHelper;
public UserService(Context context){
dbHelper=new DatabaseHelper(context);
}
//登录用
public boolean login(String username,String password){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="select * from user where username=? and password=?";
Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
return true;
}
return false;
}
//注册用
public boolean register(User user){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql="insert into user(username,password) values(?,?)";
Object obj[]={user.getUsername(),user.getPassword()};
sdb.execSQL(sql, obj);
return true;
}
}
AndroidSQLite数据库
从数据库中拿出Cursor,然后把user放到list里。
我是这样写的,但会崩溃,哪出错了??public class UserList extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("用户列表");
final DatabaseHelper dbhelper = new DatabaseHelper(this);
Cursor c = dbhelper.query();
String[] from = { "username", "password" };
int[] to = { R.id.text4, R.id.text5};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row, c, from, to);
ListView listView = getListView();
listView.setAdapter(adapter); }
}
我一般喜欢自己定义adapter和listview,觉得用android提供的listactivity很局限。
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils;
import android.util.Log;import com.tarena.android.entity.Airport;public class DatabaseHelper extends SQLiteOpenHelper{ public DatabaseHelper(Context context){
super(context,"t3gabs_db",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String str="create table airport(_id integer primary key autoincrement," +
" airport_city text, airport_name text,airport_code text)";
db.execSQL(str);
TextUtils.isEmpty(str);
Log.i("DB_Log","create table airport!");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public Cursor select(){
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.query("airport", null, null, null, null, null, null);
return cursor;
}
public void insert(Airport airport){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("_id", airport.getId());
cv.put("airport_city", airport.getCity());
cv.put("airport_name", airport.getName());
cv.put("airport_code", airport.getCode());
Log.i("DB_Log","insert data ok!");
}
public void delete(int id){
SQLiteDatabase db=this.getWritableDatabase();
db.delete("airport", "id = ?", new String[]{id+""});
Log.i("DB_Log", "delete one row OK!");
}
public void deleteAll(){
SQLiteDatabase db=this.getWritableDatabase();
db.delete("airport", null, null);
Log.i("DC_Log", "delete all data ok!");
}}package com.tarena.android;import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;import com.tarena.android.db.DatabaseHelper;public class AirportReadFromDBActivity extends Activity{
private TextView tv;
private ListView lv;
private DatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
setContentView(R.layout.airport_list);
dbHelper=new DatabaseHelper(this);
tv=(TextView)findViewById(R.id.airport_version_tv);
lv=(ListView)findViewById(R.id.airport_list_view);
int version=dbHelper.getReadableDatabase().getVersion();
tv.setText("當前機場數據版本是:"+version);
Cursor cursor=dbHelper.select();
SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.airport_list_item,cursor,
new String[]{"_id","airport_city","airport_name","airport_code"},
new int[]{R.id.airport_id_tv,R.id.airport_city_tv,R.id.airport_name_tv,R.id.airport_code_tv});
lv.setAdapter(adapter);
}
}布局xml如下
//airport_list.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="以下是所有機場列表:"
android:id="@+id/airport_version_tv"
/>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/airport_list_view"
/>
</LinearLayout>
//airport_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="["
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/airport_id_tv"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="] "
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/airport_city_tv"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="--"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/airport_name_tv"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="機場 ("
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/airport_code_tv"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=")"
/>
</LinearLayout>
至于AndroidMainFest.xml 声明相应的Activity 就不需要贴了吧 LZ懂的