主要代码
package com.example.android_loader_manager;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private LoaderManager manager;
private ListView listview;
private Button button ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager = getLoaderManager();//加载loadermanager 完成异步加载
manager.initLoader(1000, null, callback);
listview = (ListView) this.findViewById(R.id.listview);
button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Uri uri = Uri.parse("content://com.example.android_loader_manager.StudentContentProvider/student");
ContentResolver contentResolver = getContentResolver();
ContentValues value = new ContentValues();
value.put("name", "jack");
Uri result_Uri = contentResolver.insert(uri, value);
if(result_Uri!=null){
manager.restartLoader(1000, null, callback);//重新加载数据 重新启动loader 调用onLoadFinished方法 从而刷新listview
}
}
});
}
private LoaderManager.LoaderCallbacks<Cursor> callback = new LoaderCallbacks<Cursor>() {
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// TODO Auto-generated method stub
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
List<String> list = new ArrayList<String>();
// 把数据提取出来 放入适配器中
while(data.moveToNext()){
String name = data.getString(data.getColumnIndex("name"));
list.add(name);
}
MyAdapter adapter = new MyAdapter(MainActivity.this);
adapter.setList(list);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// TODO Auto-generated method stub
CursorLoader loader = new CursorLoader(MainActivity.this);
Uri uri = Uri.parse("content://com.example.android_loader_manager.StudentContentProvider/student");
loader.setUri(uri);
return loader;
}
};
class MyAdapter extends BaseAdapter{
private Context context;
private List<String> list;
public MyAdapter(Context context){
this.context = context;
}
public void setList(List<String> list){
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView view = null;
if(convertView==null){
view = new TextView(context);
}else{
view = (TextView) convertView;
}
view.setText(list.get(position).toString());
return view;
}
}
}
package com.example.android_loader_manager;
import com.example.android_loader_manager.dbhelper.DBHelper;
import android.R.integer;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class StudentContentProvider extends ContentProvider {
private final static UriMatcher URI_MATCHER = new UriMatcher(
UriMatcher.NO_MATCH);
private final static int STUDENT = 1;
private final static int STUDENTS = 2;
private DBHelper helper;
static {
URI_MATCHER.addURI(
"com.example.android_loader_manager.StudentContentProvider",
"student", STUDENTS);
URI_MATCHER.addURI(
"com.example.android_loader_manager.StudentContentProvider",
"student/#", STUDENT);
}
public StudentContentProvider() {
// TODO Auto-generated constructor stub
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
int count = 0;// 影响数据库的行数
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = helper.getWritableDatabase();
switch (flag) {
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = " stuid = " + stuid;
if (selection != null && !selection.equals("")) {
where_value += selection;
}
count = database.delete("student", where_value, selectionArgs);
break;
case STUDENTS:
count = database.delete("student", selection, selectionArgs);
break;
}
return count;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
int flag = URI_MATCHER.match(uri);
switch (flag) {
case STUDENT:
return "vnd.android.cursor.item/student";
case STUDENTS:
return "vnd.android.cursor.dir/studens";
}
return null;
}
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
// TODO Auto-generated method stub
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = helper.getWritableDatabase();
Uri uri2 = null;
switch (flag) {
case STUDENTS:
long id = database.insert("student", null, contentValues);
uri2 = ContentUris.withAppendedId(uri, id);
break;
}
System.out.println("-->>" + uri2.toString());
return uri2;
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
helper = new DBHelper(getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
Cursor cursor = null;
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = helper.getReadableDatabase();
switch (flag) {
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = " stuid = " + stuid;
if (selection != null && !"".equals(selection)) {
where_value += selection;
}
cursor = database.query("student", projection, where_value,
selectionArgs, null, null, null);
break;
case STUDENTS:
cursor = database.query("student", projection, selection,
selectionArgs, null, null, null);
break;
}
return cursor;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
int count = 0;
int flag = URI_MATCHER.match(uri);
SQLiteDatabase database = helper.getWritableDatabase();
switch (flag) {
case STUDENT:
long stuid = ContentUris.parseId(uri);
String where_value = " stuid = " + stuid;
if (selection != null && !selection.equals("")) {
where_value += selection;
}
count = database.update("student", values, where_value,
selectionArgs);
break;
case STUDENTS:
count = database
.update("student", values, selection, selectionArgs);
break;
}
return count;
}
}
<provider
android:name=".StudentContentProvider"
android:authorities="com.example.android_loader_manager.StudentContentProvider" >
</provider>
package com.example.android_loader_manager.dbhelper;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static String name = "mydb.db";
private static int version = 1;
public DBHelper(Context context) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
}
public DBHelper(Context context, String name, CursorFactory factory,
int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase database) {
// TODO Auto-generated method stub
String sql = "create table student (stuid integer primary key autoincrement,name varchar(64))";
database.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}