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

前端之家收集整理的这篇文章主要介绍了SQLite之采用ListView实现数据列表显示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用ListView实现数据列表显示@H_301_2@

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


因为Cursor@H_301_2@游标查询规定了数据库的@H_301_2@id@H_301_2@为@H_301_2@_id@H_301_2@。@H_301_2@@H_301_2@

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

改为:selectidas_id,name,phonefromstudentwhereid=?@H_301_2@@H_301_2@

@H_301_2@

@H_301_2@

layout@H_301_2@文件夹下建@H_301_2@items.xml@H_301_2@

Items.xml

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

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:orientation@H_301_2@=@H_301_2@"horizontal"@H_301_2@

>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/name"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"120dp"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"24px"@H_301_2@

android:layout_marginLeft@H_301_2@=@H_301_2@"15px"@H_301_2@

/>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/phone"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"220dp"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"24px"@H_301_2@

/>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/account"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"24px"@H_301_2@

/>@H_301_2@

</@H_301_2@LinearLayout@H_301_2@>@H_301_2@

@H_301_2@

@H_301_2@

@H_301_2@

Activity_main.xml@H_301_2@

@H_301_2@

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

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:orientation@H_301_2@=@H_301_2@"vertical"@H_301_2@

android:gravity@H_301_2@=@H_301_2@"center"@H_301_2@

>@H_301_2@

@H_301_2@<@H_301_2@LinearLayout@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:orientation@H_301_2@=@H_301_2@"horizontal"@H_301_2@

>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/name"@H_301_2@

@H_301_2@android:layout_width@H_301_2@=@H_301_2@"120dp"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:text@H_301_2@=@H_301_2@"@string/name"@H_301_2@

android:layout_marginLeft@H_301_2@=@H_301_2@"15px"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"28px"@H_301_2@

/>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/phone"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"220dp"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:text@H_301_2@=@H_301_2@"@string/phone"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"28px"@H_301_2@

/>@H_301_2@

@H_301_2@<@H_301_2@TextView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/account"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"wrap_content"@H_301_2@

android:text@H_301_2@=@H_301_2@"@string/account"@H_301_2@

android:textSize@H_301_2@=@H_301_2@"28px"@H_301_2@

/>@H_301_2@

@H_301_2@</@H_301_2@LinearLayout@H_301_2@>@H_301_2@

@H_301_2@<@H_301_2@ListView@H_301_2@

android:id@H_301_2@=@H_301_2@"@+id/listView"@H_301_2@

android:layout_width@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

android:layout_height@H_301_2@=@H_301_2@"fill_parent"@H_301_2@

/>@H_301_2@

</@H_301_2@LinearLayout@H_301_2@>@H_301_2@

@H_301_2@

2.@H_301_2@创建实体类(javabean@H_301_2@)@H_301_2@@H_301_2@

Student.java@H_301_2@

@H_301_2@package@H_301_2@com.example.entity;@H_301_2@

public@H_301_2@@H_301_2@class@H_301_2@Student{@H_301_2@

private@H_301_2@Integer@H_301_2@id@H_301_2@;@H_301_2@

private@H_301_2@String@H_301_2@name@H_301_2@;@H_301_2@

private@H_301_2@String@H_301_2@phone@H_301_2@;@H_301_2@

private@H_301_2@Double@H_301_2@account@H_301_2@;@H_301_2@

public@H_301_2@Student(Integerid,Stringname,Stringphone,Doubleaccount){@H_301_2@

this@H_301_2@.@H_301_2@id@H_301_2@=id;@H_301_2@

this@H_301_2@.@H_301_2@name@H_301_2@=name;@H_301_2@

this@H_301_2@.@H_301_2@phone@H_301_2@=phone;@H_301_2@

this@H_301_2@.@H_301_2@account@H_301_2@=account;@H_301_2@

}@H_301_2@

public@H_301_2@IntegergetId(){@H_301_2@

return@H_301_2@@H_301_2@id@H_301_2@;@H_301_2@

}@H_301_2@

public@H_301_2@@H_301_2@void@H_301_2@setId(Integerid){@H_301_2@

this@H_301_2@.@H_301_2@id@H_301_2@=id;@H_301_2@

}@H_301_2@

public@H_301_2@StringgetName(){@H_301_2@

return@H_301_2@@H_301_2@name@H_301_2@;@H_301_2@

}@H_301_2@

public@H_301_2@@H_301_2@void@H_301_2@setName(Stringname){@H_301_2@

this@H_301_2@.@H_301_2@name@H_301_2@=name;@H_301_2@

}@H_301_2@

public@H_301_2@StringgetPhone(){@H_301_2@

return@H_301_2@@H_301_2@phone@H_301_2@;@H_301_2@

}@H_301_2@

public@H_301_2@@H_301_2@void@H_301_2@setPhone(Stringphone){@H_301_2@

this@H_301_2@.@H_301_2@phone@H_301_2@=phone;@H_301_2@

}@H_301_2@

public@H_301_2@DoublegetAccount(){@H_301_2@

return@H_301_2@@H_301_2@account@H_301_2@;@H_301_2@

}@H_301_2@

public@H_301_2@@H_301_2@void@H_301_2@setAccount(Doubleaccount){@H_301_2@

this@H_301_2@.@H_301_2@account@H_301_2@=account;@H_301_2@

}@H_301_2@

public@H_301_2@StringtoString(){@H_301_2@

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

}@H_301_2@

}@H_301_2@

@H_301_2@

@H_301_2@

3.@H_301_2@创建@H_301_2@DBOpenHelper@H_301_2@类@H_301_2@@H_301_2@extends@H_301_2@sqliteOpenHelper@H_301_2@创建数据库@H_301_2@

@H_301_2@

packagecom.example.sqlite;@H_301_2@

importandroid.content.Context;@H_301_2@

importandroid.database.sqlite.sqliteDatabase;@H_301_2@

importandroid.database.sqlite.sqliteDatabase.CursorFactory;@H_301_2@

importandroid.database.sqlite.sqliteOpenHelper;@H_301_2@

publicclassDBOpenHelperextendssqliteOpenHelper{@H_301_2@

publicDBOpenHelper(Contextcontext){@H_301_2@

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

//TODOAuto-generatedconstructorstub@H_301_2@

}@H_301_2@

@Override@H_301_2@

publicvoidonCreate(sqliteDatabasedb){@H_301_2@

db.execsql("createtablestudent(idintegerprimarykeyautoincrement,namevarchar(20)),@H_301_2@phonevarchar(20)null");@H_301_2@@H_301_2@

/**@H_301_2@

*版本更新后调用方法@H_301_2@@H_301_2@

*/@H_301_2@

publicvoidonUpgrade(sqliteDatabasedb,intoldVersion,intnewVersion){@H_301_2@

db.execsql("altertablestudentaddaccountDoublenull");@H_301_2@

@H_301_2@

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

.java@H_301_2@

packagecom.example.server;@H_301_2@

importjava.util.ArrayList;@H_301_2@

importjava.util.List;@H_301_2@

importandroid.content.Context;@H_301_2@

importandroid.database.Cursor;@H_301_2@

importandroid.database.sqlException;@H_301_2@

importandroid.database.sqlite.sqliteDatabase;@H_301_2@

importcom.example.entity.Student;@H_301_2@

importcom.example.sqlite.DBOpenHelper;@H_301_2@

publicclassStudentService{@H_301_2@

privateDBOpenHelperhelper;@H_301_2@

publicStudentService(Contextcontext){@H_301_2@

helper=newDBOpenHelper(context);@H_301_2@

}@H_301_2@

/**@H_301_2@

*获取指定的记录@H_301_2@

*@H_301_2@@param@H_301_2@offset跳过前面offset记录@H_301_2@

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

*@H_301_2@@return@H_301_2@@H_301_2@List<Student>@H_301_2@

*/@H_301_2@

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

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

sqliteDatabasedb=@H_301_2@helper@H_301_2@.getReadableDatabase();@H_301_2@

Cursorcursor=db.rawQuery(@H_301_2@"select*fromstudentorderbyidasclimit?,?"@H_301_2@,@H_301_2@new@H_301_2@String[]{String.@H_301_2@valueOf@H_301_2@(offset),String.@H_301_2@valueOf@H_301_2@(maxsize)});@H_301_2@

while@H_301_2@(cursor.moveToNext()){@H_301_2@

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

Stringname=cursor.getString(cursor.getColumnIndex(@H_301_2@"name"@H_301_2@));@H_301_2@

Stringphone=cursor.getString(cursor.getColumnIndex(@H_301_2@"phone"@H_301_2@));@H_301_2@

Doubleaccount=cursor.getDouble(cursor.getColumnIndex(@H_301_2@"account"@H_301_2@));@H_301_2@

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

}@H_301_2@

cursor.close();@H_301_2@

return@H_301_2@list;@H_301_2@

}@H_301_2@

/**@H_301_2@

*获取指定的记录@H_301_2@

*@H_301_2@@param@H_301_2@offset跳过前面offset记录@H_301_2@

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

*@H_301_2@@return@H_301_2@@H_301_2@Cursor@H_301_2@

*/@H_301_2@

public@H_301_2@CursorgetScrollDateReturnCursor(@H_301_2@int@H_301_2@offset,@H_301_2@int@H_301_2@maxsize){@H_301_2@

sqliteDatabasedb=@H_301_2@helper@H_301_2@.getReadableDatabase();@H_301_2@

/*Cursorcursor=db.rawQuery("selectidas_id,accountfromstudentorderbyid@H_301_2@asc@H_301_2@limit?,?",@H_301_2@

newString[]{String.valueOf(offset),String.valueOf(@H_301_2@maxsize@H_301_2@)});*/@H_301_2@

Cursorcursor=db.rawQuery(@H_301_2@"select*fromstudentorderbyidasclimit?,@H_301_2@

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

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

}@H_301_2@

}@H_301_2@

@H_301_2@

6.@H_301_2@MainActivity.java@H_301_2@

packagecom.example.sqlite;@H_301_2@

importjava.util.ArrayList;@H_301_2@

importjava.util.HashMap;@H_301_2@

importjava.util.List;@H_301_2@

importjava.util.Map;@H_301_2@

importcom.example.entity.Student;@H_301_2@

importcom.example.server.StudentService;@H_301_2@

importandroid.os.Bundle;@H_301_2@

importandroid.app.Activity;@H_301_2@

importandroid.database.Cursor;@H_301_2@

importandroid.support.v4.widget.SimpleCursorAdapter;@H_301_2@

importandroid.view.Menu;@H_301_2@

importandroid.widget.ListView;@H_301_2@

importandroid.widget.SimpleAdapter;@H_301_2@

publicclassMainActivityextendsActivity{@H_301_2@

privateListViewlistView=null;@H_301_2@

privateStudentServicestudent=null;@H_301_2@

@Override@H_301_2@

protectedvoidonCreate(BundlesavedInstanceState){@H_301_2@

super.onCreate(savedInstanceState);@H_301_2@

setContentView(R.layout.activity_main);@H_301_2@

student=newStudentService(this);//实例化@H_301_2@StudentService@H_301_2@类@H_301_2@@H_301_2@

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

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

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

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

@H_301_2@

@H_301_2@@H_301_2@//给listView添加事件监听@H_301_2@

@H_301_2@listView@H_301_2@.setOnItemClickListener(@H_301_2@new@H_301_2@OnItemClickListener(){@H_301_2@

@Override@H_301_2@

public@H_301_2@@H_301_2@void@H_301_2@onItemClick(AdapterView<?>parent,Viewview,@H_301_2@

int@H_301_2@position,@H_301_2@long@H_301_2@id){@H_301_2@

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

Students=(Student)parent.getItemAtPosition(position);@H_301_2@

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

}@H_301_2@

});@H_301_2@

//使用@H_301_2@SimpleAdapter@H_301_2@来绑定数据@H_301_2@@H_301_2@

privatevoidShowListViewDate1(){@H_301_2@

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

List<Map<String,Object>>data=newArrayList<Map<String,Object>>();@H_301_2@

for(Studentstudents:s){@H_301_2@

@H_301_2@Map<String,Object>map=newHashMap<String,Object>();@H_301_2@

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

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

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

@H_301_2@data.add(map);@H_301_2@

SimpleAdapteradapter=newSimpleAdapter(MainActivity.this,data,R.layout.items,@H_301_2@

@H_301_2@newString[]{"name","phone","account"},newint[]{R.id.name,R.id.phone,R.id.account});@H_301_2@

listView.setAdapter(adapter);@H_301_2@

//使用@H_301_2@SimpleCursorAdapter@H_301_2@绑定数据@H_301_2@@H_301_2@

privatevoidShowListViewDate2(){@H_301_2@

Cursorcursor=student.getScrollDateReturnCursor(0,20);@H_301_2@

SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,cursor,255)">newString[]{"name",255)">}@H_301_2@

//自定义适配器@H_301_2@

private@H_301_2@@H_301_2@void@H_301_2@ShowListViewDate3(){@H_301_2@

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

MyAdapteradapter=@H_301_2@new@H_301_2@MyAdapter(@H_301_2@this@H_301_2@,s,R.layout.@H_301_2@items@H_301_2@);@H_301_2@

@H_301_2@listView@H_301_2@.setAdapter(adapter);@H_301_2@

publicbooleanonCreateOptionsMenu(Menumenu){@H_301_2@

//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.@H_301_2@

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

returntrue;@H_301_2@

自定义适配器类MyAdapter,extendsBaseAdapter@H_301_2@@H_301_2@

MyAdapter.java@H_301_2@

importandroid.content.Context;@H_301_2@

importandroid.view.LayoutInflater;@H_301_2@

importandroid.view.View;@H_301_2@

importandroid.view.ViewGroup;@H_301_2@

importandroid.widget.BaseAdapter;@H_301_2@

importandroid.widget.TextView;@H_301_2@

publicclassMyAdapterextendsBaseAdapter{@H_301_2@

privateList<Student>student;//绑定的数据@H_301_2@@H_301_2@

privateintresource;//绑定的条目界面@H_301_2@R.layout.items@H_301_2@@H_301_2@

privateLayoutInflaterinflater;//把@H_301_2@xml@H_301_2@布局文件生成@H_301_2@view@H_301_2@对象@H_301_2@@H_301_2@

publicMyAdapter(Contextcontext,List<Student>student,intresource){@H_301_2@

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

this.student=student;@H_301_2@

this.resource=resource;@H_301_2@

publicintgetCount(){@H_301_2@

returnstudent.size();@H_301_2@

publicObjectgetItem(intposition){@H_301_2@

returnstudent.get(position);@H_301_2@

publiclonggetItemId(intposition){@H_301_2@

returnposition;@H_301_2@

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){@H_301_2@

if(convertView==null){@H_301_2@

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

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

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

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

Students=student.get(position);//在@H_301_2@List<Student>@H_301_2@获取要绑定的数据@H_301_2@@H_301_2@

//绑定数据到@H_301_2@TextView@H_301_2@中@H_301_2@@H_301_2@

name.setText(s.getName());@H_301_2@

phone.setText(s.getPhone());@H_301_2@

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

returnconvertView;@H_301_2@

@H_301_2@

原文链接:https://www.f2er.com/sqlite/200999.html

猜你在找的Sqlite相关文章