android异步查询 sqlitehelper contentprovider loader

主要代码

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

	}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值