SimpleAdapter,SimpleCursorAdapter,自定义适配器CursorAdapter绑定数据库中的数据到控件并显示
注意:在配置文件中加入权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
将数据库放到外部存储storage/Download文件下
结果如图:
第一种:SimpleAdapter
逻辑代码文件:
<span style="font-size:18px;">package com.example.day14_sqlitedb;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
ListView lv;
List<Map<String, Object>> list;
SQLiteDatabase db;
String path = Environment.getExternalStorageDirectory().
getAbsolutePath()+File.separator+"Download"+File.separator+"test.db";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
db = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READWRITE);
SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
getData(), R.layout.style, new String[] { "name", "sex", "age",
"love" }, new int[] { R.id.name, R.id.sex, R.id.age,
R.id.love });
lv.setAdapter(adapter);
}
public List<Map<String, Object>> getData() {
list = new ArrayList<Map<String, Object>>();
String sql = "select * from person";
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
Map<String, Object> map = new HashMap<String, Object>();
String name = cursor.getString(cursor.getColumnIndex("name"));
String sex = cursor.getString(cursor.getColumnIndex("sex"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String love = cursor.getString(cursor.getColumnIndex("love"));
map.put("name", name);
map.put("sex", sex);
map.put("age", age);
map.put("love", love);
list.add(map);
}
return list;
}
}
</span>
第二种SimpleCursorAdapter:
逻辑代码文件:
<span style="font-size:18px;">package com.SimpleCursorAdapter;
import java.io.File;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView;
import com.example.day14_sqlitedb.R;
public class SimpleCursoradapter extends Activity {
ListView lv;
SQLiteDatabase db;
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + "Download" + File.separator + "test.db";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
db = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READWRITE);
Cursor c = db.rawQuery("select * from person", null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
getApplicationContext(), R.layout.style, c, new String[] {
"name", "sex", "age", "love" }, new int[] { R.id.name,
R.id.sex, R.id.age, R.id.love },
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
lv.setAdapter(adapter);
}
}
</span>
第三种自定义适配器CursorAdapter:
<span style="font-size:18px;">package com.zidiyiAdapter;
import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import com.example.day14_sqlitedb.R;
public class MyCursorAdapter extends Activity{
ListView lv;
SQLiteDatabase db;
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + "Download" + File.separator + "test.db";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.lv);
db=SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
String sql="select * from person";
Cursor c=db.rawQuery(sql, null);
MyAdapter adapter=new MyAdapter(getApplicationContext(), c);
}
public class MyAdapter extends CursorAdapter
{
public MyAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
// newView 返回item布局 view 给 bindView
@Override
public View newView(Context context, Cursor c, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.style,null);
}
// 参数1:newVIew 里返回的View视图
@Override
public void bindView(View view, Context context, Cursor c) {
TextView name=(TextView) view.findViewById(R.id.name);
TextView sex=(TextView) view.findViewById(R.id.sex);
TextView age=(TextView) view.findViewById(R.id.age);
TextView love=(TextView) view.findViewById(R.id.love);
name.setText(c.getString(c.getColumnIndex("name")));
sex.setText(c.getString(c.getColumnIndex("sex")));
age.setText(c.getInt(c.getColumnIndex("age")));
love.setText(c.getString(c.getColumnIndex("love")));
}
}
}
</span>
三种共用的主布局文件:
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
</span>
三种共用的样式布局文件:
<span style="font-size:18px;"><?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="horizontal" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="22sp"/>
<TextView
android:id="@+id/sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="22sp"/>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="22sp"/>
<TextView
android:id="@+id/love"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00ff00"
android:textSize="22sp"/>
</LinearLayout>
</span>