SQLite之采用ListView实现数据列表显示

本文介绍如何使用ListView在Android应用中展示学生数据列表,包括创建实体类、数据库操作类及使用不同适配器进行数据绑定的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用ListView实现数据列表显示

 

注意:在用SimpleCursorAdapter适配器时,如果查询语句为select * from student where id=? 时,而且数据库没有_id字段的话,运行后会报如下的错误


因为Cursor游标查询规定了数据库的id_id

解决办法:为数据库添加_id字段    或者    改查询sql  

改为:select id as _id,name,phone from student where id=?

 

 

layout文件夹下建items.xml

Items.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent" 

    android:orientation="horizontal"

    >

 

    <TextView

        android:id="@+id/name"

        android:layout_width="120dp"

        android:layout_height="wrap_content"

        android:textSize="24px"

        android:layout_marginLeft="15px"

         />

 

    <TextView

        android:id="@+id/phone"

        android:layout_width="220dp"

        android:layout_height="wrap_content"

        android:textSize="24px"

        />

 

    <TextView

        android:id="@+id/account"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:textSize="24px"

       />

 

</LinearLayout>

 

 

 

Activity_main.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    android:gravity="center"

     >

    <LinearLayout

    android:layout_width="fill_parent"

    android:layout_height="wrap_content" 

    android:orientation="horizontal"

    >

    <TextView

        android:id="@+id/name"

        android:layout_width="120dp"

        android:layout_height="wrap_content"

        android:text="@string/name"

        android:layout_marginLeft="15px"

        android:textSize="28px"

         />

 

    <TextView

        android:id="@+id/phone"

        android:layout_width="220dp"

        android:layout_height="wrap_content"

        android:text="@string/phone"

        android:textSize="28px"

        />

 

    <TextView

        android:id="@+id/account"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/account"

        android:textSize="28px"

       />

    </LinearLayout>

    <ListView 

        android:id="@+id/listView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        />

 

</LinearLayout>

 

2.创建实体类(javabean

  Student.java

   package com.example.entity;

 

public class Student {

private Integer id;

private String name;

private String phone;

private Double account;

public Student(Integer id,String name,String phone,Double account){

this.id=id;

this.name=name;

this.phone=phone;

this.account=account;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public Double getAccount() {

return account;

}

public void setAccount(Double account) {

this.account = account;

}

public String toString(){

return this.getId()+","+this.getName()+","+this.getPhone()+","+this.getAccount();

}

 

}

 

 

3.创建DBOpenHelper extends SQLiteOpenHelper 创建数据库

 

 

 

package com.example.sqlite;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

 

public class DBOpenHelper extends SQLiteOpenHelper {

 

public DBOpenHelper(Context context) {

super(context, "olay", null, 3);

// TODO Auto-generated constructor stub

}

 

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL("create table student(id integer primary key autoincrement,name varchar(20))phone varchar(20) null");

}

 

/**

 * 版本更新后调用次方法

 */

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("alter table student add account Double null");

}

 

}

 

 

 

4.创建StudentService (方法的操作类)

StudentService.java

 

package com.example.server;

 

import java.util.ArrayList;

import java.util.List;

 

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

 

import com.example.entity.Student;

import com.example.sqlite.DBOpenHelper;

 

public class StudentService {

private DBOpenHelper helper;

public StudentService(Context context) {

helper = new DBOpenHelper(context);

}

/**

 * 获取指定的记录

 * @param offset  跳过前面offset记录

 * @param maxsize  最多显示maxsize条记录

 * @return List<Student>

 */

public List<Student> getScrollDate(int offset,int maxsize){

List<Student> list = new ArrayList<Student>();

SQLiteDatabase db = helper.getReadableDatabase();

Cursor cursor=db.rawQuery("select * from student order by id asc limit ?,?"new String[]{String.valueOf(offset),String.valueOf(maxsize)});

while(cursor.moveToNext()){

int sId = cursor.getInt(cursor.getColumnIndex("id"));

String name = cursor.getString(cursor.getColumnIndex("name"));

String phone = cursor.getString(cursor.getColumnIndex("phone"));

Double account = cursor.getDouble(cursor.getColumnIndex("account"));

list.add(new Student(sId,name,phone,account));

}

cursor.close();

return list;

}

/**

 * 获取指定的记录

 * @param offset  跳过前面offset记录

 * @param maxsize  最多显示maxsize条记录

 * @return Cursor

 */

public Cursor getScrollDateReturnCursor(int offset,int maxsize){

SQLiteDatabase db = helper.getReadableDatabase();

/*Cursor cursor=db.rawQuery("select id as _id,name,phone,account from student order by id asc limit ?,?",

new String[]{String.valueOf(offset),String.valueOf(maxsize)});*/

Cursor cursor=db.rawQuery("select * from student order by id asc limit ?,?",

new String[]{String.valueOf(offset),String.valueOf(maxsize)});

return cursor; //不能关闭cursor,不然返回不了cursor

}

}

 

 

6.MainActivity.java

 

package com.example.sqlite;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import com.example.entity.Student;

import com.example.server.StudentService;

 

import android.os.Bundle;

import android.app.Activity;

import android.database.Cursor;

import android.support.v4.widget.SimpleCursorAdapter;

import android.view.Menu;

import android.widget.ListView;

import android.widget.SimpleAdapter;

 

public class MainActivity extends Activity {

private ListView listView = null;

private StudentService student=null;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

student = new StudentService(this);  //实例化StudentService

listView = (ListView) findViewById(R.id.listView); //获取ListView组件

   // ShowListViewDate1(); //使用SimpleAdapter来绑定数据

    //ShowListViewDate2(); //使用SimpleCursorAdapter绑定数据

         ShowListViewDate3(); //自定义适配器

 

          //给listView添加事件监听

    listView.setOnItemClickListener(new OnItemClickListener() {

 

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

//parent是ListView , View是选中的一行view ,position是集合中一条数据的下标

Student s=(Student) parent.getItemAtPosition(position);

Toast.makeText(MainActivity.this"姓名是:"+s.getName()+"  电话号码是:"+s.getPhone(), Toast.LENGTH_LONG).show();

}

});

}

 

//使用SimpleAdapter来绑定数据

private void ShowListViewDate1() {

    List<Student> s=student.getScrollDate(0, 20); //分页查询数据

    

    List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();

    for(Student students:s){

    Map<String,Object> map = new HashMap<String, Object>();

    map.put("name", students.getName());

    map.put("phone", students.getPhone());

    map.put("account", students.getAccount());

    data.add(map);

    }

    

    SimpleAdapter adapter =new SimpleAdapter(MainActivity.this, data, R.layout.items,

    new String[]{"name","phone","account"}, new int[]{R.id.name,R.id.phone,R.id.account});

    

    listView.setAdapter(adapter);

}

 

//使用SimpleCursorAdapter绑定数据

private void  ShowListViewDate2(){

Cursor cursor =student.getScrollDateReturnCursor(0, 20);

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.items, cursor,

new String[]{"name","phone","account"}, new int[]{R.id.name,R.id.phone,R.id.account});

listView.setAdapter(adapter);

}

//自定义适配器

private void ShowListViewDate3(){

 List<Student> s=student.getScrollDate(0, 20); //分页查询数据

 MyAdapter adapter = new MyAdapter(this, s, R.layout.items);

 listView.setAdapter(adapter);

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

}

 

 

 

 

自定义适配器类 MyAdapter ,extends BaseAdapter

 

MyAdapter.java

 

package com.example.sqlite;

 

import java.util.List;

 

import com.example.entity.Student;

 

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

 

public class MyAdapter extends BaseAdapter {

private List<Student> student; //绑定的数据

private int resource; //绑定的条目界面       R.layout.items

private LayoutInflater inflater; //xml布局文件生成view对象

 

public MyAdapter(Context context,List<Student> student,int resource){

this.inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //获取上下文的LayoutInflater

this.student=student;

this.resource=resource;

}

@Override

public int getCount() {

return student.size();

}

 

@Override

public Object getItem(int position) {

return student.get(position);

}

 

@Override

public long getItemId(int position) {

return position;

}

 

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if(convertView==null){

convertView=inflater.inflate(resource, null); //从指定的xml资源中inflate出一个新的View

}

TextView name = (TextView) convertView.findViewById(R.id.name); //取得组件

TextView  phone= (TextView) convertView.findViewById(R.id.phone); //取得组件

TextView account = (TextView) convertView.findViewById(R.id.account); //取得组件

Student s = student.get(position); //List<Student>中获取要绑定的数据

//绑定数据到TextView

name.setText(s.getName());

phone.setText(s.getPhone());

account.setText(s.getAccount().toString());

return convertView;

}

 

}

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值