当前位置:   article > 正文

android异步查询 sqlitehelper contentprovider loader_android contentresolver异步查询

android contentresolver异步查询

主要代码

  1. package com.example.android_loader_manager;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.app.LoaderManager;
  6. import android.app.LoaderManager.LoaderCallbacks;
  7. import android.content.ContentResolver;
  8. import android.content.ContentValues;
  9. import android.content.Context;
  10. import android.content.CursorLoader;
  11. import android.content.Loader;
  12. import android.database.Cursor;
  13. import android.net.Uri;
  14. import android.os.Bundle;
  15. import android.view.View;
  16. import android.view.View.OnClickListener;
  17. import android.view.ViewGroup;
  18. import android.widget.BaseAdapter;
  19. import android.widget.Button;
  20. import android.widget.ListView;
  21. import android.widget.TextView;
  22. public class MainActivity extends Activity {
  23. private LoaderManager manager;
  24. private ListView listview;
  25. private Button button ;
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. manager = getLoaderManager();//加载loadermanager 完成异步加载
  31. manager.initLoader(1000, null, callback);
  32. listview = (ListView) this.findViewById(R.id.listview);
  33. button = (Button) this.findViewById(R.id.button);
  34. button.setOnClickListener(new OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. // TODO Auto-generated method stub
  38. Uri uri = Uri.parse("content://com.example.android_loader_manager.StudentContentProvider/student");
  39. ContentResolver contentResolver = getContentResolver();
  40. ContentValues value = new ContentValues();
  41. value.put("name", "jack");
  42. Uri result_Uri = contentResolver.insert(uri, value);
  43. if(result_Uri!=null){
  44. manager.restartLoader(1000, null, callback);//重新加载数据 重新启动loader 调用onLoadFinished方法 从而刷新listview
  45. }
  46. }
  47. });
  48. }
  49. private LoaderManager.LoaderCallbacks<Cursor> callback = new LoaderCallbacks<Cursor>() {
  50. @Override
  51. public void onLoaderReset(Loader<Cursor> loader) {
  52. // TODO Auto-generated method stub
  53. }
  54. @Override
  55. public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
  56. List<String> list = new ArrayList<String>();
  57. // 把数据提取出来 放入适配器中
  58. while(data.moveToNext()){
  59. String name = data.getString(data.getColumnIndex("name"));
  60. list.add(name);
  61. }
  62. MyAdapter adapter = new MyAdapter(MainActivity.this);
  63. adapter.setList(list);
  64. listview.setAdapter(adapter);
  65. adapter.notifyDataSetChanged();
  66. }
  67. @Override
  68. public Loader<Cursor> onCreateLoader(int id, Bundle args) {
  69. // TODO Auto-generated method stub
  70. CursorLoader loader = new CursorLoader(MainActivity.this);
  71. Uri uri = Uri.parse("content://com.example.android_loader_manager.StudentContentProvider/student");
  72. loader.setUri(uri);
  73. return loader;
  74. }
  75. };
  76. class MyAdapter extends BaseAdapter{
  77. private Context context;
  78. private List<String> list;
  79. public MyAdapter(Context context){
  80. this.context = context;
  81. }
  82. public void setList(List<String> list){
  83. this.list = list;
  84. }
  85. @Override
  86. public int getCount() {
  87. // TODO Auto-generated method stub
  88. return list.size();
  89. }
  90. @Override
  91. public Object getItem(int position) {
  92. // TODO Auto-generated method stub
  93. return list.get(position);
  94. }
  95. @Override
  96. public long getItemId(int position) {
  97. // TODO Auto-generated method stub
  98. return position;
  99. }
  100. @Override
  101. public View getView(int position, View convertView, ViewGroup parent) {
  102. // TODO Auto-generated method stub
  103. TextView view = null;
  104. if(convertView==null){
  105. view = new TextView(context);
  106. }else{
  107. view = (TextView) convertView;
  108. }
  109. view.setText(list.get(position).toString());
  110. return view;
  111. }
  112. }
  113. }


  1. package com.example.android_loader_manager;
  2. import com.example.android_loader_manager.dbhelper.DBHelper;
  3. import android.R.integer;
  4. import android.content.ContentProvider;
  5. import android.content.ContentUris;
  6. import android.content.ContentValues;
  7. import android.content.UriMatcher;
  8. import android.database.Cursor;
  9. import android.database.sqlite.SQLiteDatabase;
  10. import android.net.Uri;
  11. public class StudentContentProvider extends ContentProvider {
  12. private final static UriMatcher URI_MATCHER = new UriMatcher(
  13. UriMatcher.NO_MATCH);
  14. private final static int STUDENT = 1;
  15. private final static int STUDENTS = 2;
  16. private DBHelper helper;
  17. static {
  18. URI_MATCHER.addURI(
  19. "com.example.android_loader_manager.StudentContentProvider",
  20. "student", STUDENTS);
  21. URI_MATCHER.addURI(
  22. "com.example.android_loader_manager.StudentContentProvider",
  23. "student/#", STUDENT);
  24. }
  25. public StudentContentProvider() {
  26. // TODO Auto-generated constructor stub
  27. }
  28. @Override
  29. public int delete(Uri uri, String selection, String[] selectionArgs) {
  30. // TODO Auto-generated method stub
  31. int count = 0;// 影响数据库的行数
  32. int flag = URI_MATCHER.match(uri);
  33. SQLiteDatabase database = helper.getWritableDatabase();
  34. switch (flag) {
  35. case STUDENT:
  36. long stuid = ContentUris.parseId(uri);
  37. String where_value = " stuid = " + stuid;
  38. if (selection != null && !selection.equals("")) {
  39. where_value += selection;
  40. }
  41. count = database.delete("student", where_value, selectionArgs);
  42. break;
  43. case STUDENTS:
  44. count = database.delete("student", selection, selectionArgs);
  45. break;
  46. }
  47. return count;
  48. }
  49. @Override
  50. public String getType(Uri uri) {
  51. // TODO Auto-generated method stub
  52. int flag = URI_MATCHER.match(uri);
  53. switch (flag) {
  54. case STUDENT:
  55. return "vnd.android.cursor.item/student";
  56. case STUDENTS:
  57. return "vnd.android.cursor.dir/studens";
  58. }
  59. return null;
  60. }
  61. @Override
  62. public Uri insert(Uri uri, ContentValues contentValues) {
  63. // TODO Auto-generated method stub
  64. int flag = URI_MATCHER.match(uri);
  65. SQLiteDatabase database = helper.getWritableDatabase();
  66. Uri uri2 = null;
  67. switch (flag) {
  68. case STUDENTS:
  69. long id = database.insert("student", null, contentValues);
  70. uri2 = ContentUris.withAppendedId(uri, id);
  71. break;
  72. }
  73. System.out.println("-->>" + uri2.toString());
  74. return uri2;
  75. }
  76. @Override
  77. public boolean onCreate() {
  78. // TODO Auto-generated method stub
  79. helper = new DBHelper(getContext());
  80. return false;
  81. }
  82. @Override
  83. public Cursor query(Uri uri, String[] projection, String selection,
  84. String[] selectionArgs, String sortOrder) {
  85. // TODO Auto-generated method stub
  86. Cursor cursor = null;
  87. int flag = URI_MATCHER.match(uri);
  88. SQLiteDatabase database = helper.getReadableDatabase();
  89. switch (flag) {
  90. case STUDENT:
  91. long stuid = ContentUris.parseId(uri);
  92. String where_value = " stuid = " + stuid;
  93. if (selection != null && !"".equals(selection)) {
  94. where_value += selection;
  95. }
  96. cursor = database.query("student", projection, where_value,
  97. selectionArgs, null, null, null);
  98. break;
  99. case STUDENTS:
  100. cursor = database.query("student", projection, selection,
  101. selectionArgs, null, null, null);
  102. break;
  103. }
  104. return cursor;
  105. }
  106. @Override
  107. public int update(Uri uri, ContentValues values, String selection,
  108. String[] selectionArgs) {
  109. // TODO Auto-generated method stub
  110. int count = 0;
  111. int flag = URI_MATCHER.match(uri);
  112. SQLiteDatabase database = helper.getWritableDatabase();
  113. switch (flag) {
  114. case STUDENT:
  115. long stuid = ContentUris.parseId(uri);
  116. String where_value = " stuid = " + stuid;
  117. if (selection != null && !selection.equals("")) {
  118. where_value += selection;
  119. }
  120. count = database.update("student", values, where_value,
  121. selectionArgs);
  122. break;
  123. case STUDENTS:
  124. count = database
  125. .update("student", values, selection, selectionArgs);
  126. break;
  127. }
  128. return count;
  129. }
  130. }

  1. <provider
  2. android:name=".StudentContentProvider"
  3. android:authorities="com.example.android_loader_manager.StudentContentProvider" >
  4. </provider>

  1. package com.example.android_loader_manager.dbhelper;
  2. import android.content.Context;
  3. import android.database.DatabaseErrorHandler;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;
  6. import android.database.sqlite.SQLiteOpenHelper;
  7. public class DBHelper extends SQLiteOpenHelper {
  8. private static String name = "mydb.db";
  9. private static int version = 1;
  10. public DBHelper(Context context) {
  11. super(context, name, null, version);
  12. // TODO Auto-generated constructor stub
  13. }
  14. public DBHelper(Context context, String name, CursorFactory factory,
  15. int version, DatabaseErrorHandler errorHandler) {
  16. super(context, name, factory, version, errorHandler);
  17. // TODO Auto-generated constructor stub
  18. }
  19. @Override
  20. public void onCreate(SQLiteDatabase database) {
  21. // TODO Auto-generated method stub
  22. String sql = "create table student (stuid integer primary key autoincrement,name varchar(64))";
  23. database.execSQL(sql);
  24. }
  25. @Override
  26. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  27. // TODO Auto-generated method stub
  28. }
  29. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/932792
推荐阅读
相关标签
  

闽ICP备14008679号