Android 内容提供者 一个查询内容小demo
2017-02-16 16:17
330 查看
Android 内容提供者
以下是demo的代码:首先 先将下面的项目放到Android Studio里:
http://pan.baidu.com/s/1kUMYMGn
是个压缩包 (其实压缩包里已经创建好了)
在项目的java路径下面新建一个新得文件夹 com.dzz.provider
在里面在新建一个MyProvider 文件
MyProvider 文件代码:
package com.dzz.provider; 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; import android.support.annotation.Nullable; import android.util.Log; import com.dzz.db.DbHelper; /** * Created by 朝花偏不夕拾 on 2017/2/14. */ public class MyProvider extends ContentProvider { private SQLiteDatabase sqLiteDatabase; private UriMatcher uriMatcher; private static final int PERSONS=1; private static final int PERSON=2; @Override public boolean onCreate() { Log.i("test","onCreate"); DbHelper dbHelper=new DbHelper(getContext(),"question.db",null,2); sqLiteDatabase = dbHelper.getReadableDatabase(); //实例化URL匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加匹配规则 //http://localhost:8080/xxx/000.action //规则 : // content://com.dzz.android24_sqlite.person/persons //查询单个 // content://com.dzz.android24_sqlite.person/persons/# //条件查询 uriMatcher.addURI("com.dzz.android24_sqlite.person","persons",MyProvider.PERSONS); uriMatcher.addURI("com.dzz.android24_sqlite.person","persons/#",MyProvider.PERSON); return false; } @Nullable @Override //Cursor 是个结果 public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { Log.i("test","query"); int code= uriMatcher.match(uri); switch (code) { case MyProvider.PERSONS: Log.i("test","query所有"); //查询所有的数据 return sqLiteDatabase.query(true,"person",strings,s,strings1,null,null,s1,null); case MyProvider.PERSON: Log.i("test","query单个"); //获取#的值 long cc= ContentUris.parseId(uri); return sqLiteDatabase.rawQuery("select * from person where _id=?",new String[]{cc+""}); } return null; } @Nullable @Override public String getType(Uri uri) { Log.i("test","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { Log.i("test","insert"); return null; } @Override public int delete(Uri uri, String s, String[] strings) { Log.i("test","delete"); return 0; } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { Log.i("test","update"); return 0; } }
还要在这个项目的清单文件配置 提供者
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dzz.android24_sqlite"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--配置提供者内容--> <provider android:authorities="com.dzz.android24_sqlite.person" android:name="com.dzz.provider.MyProvider" android:exported="true" ></provider> </application> </manifest>
然后在新建一个项目 因为我们要取到上一个项目里的值
先写下XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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" android:orientation="vertical" tools:context="com.dzz.android24_contentresolver.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取数据" android:onClick="getData" /> </LinearLayout>
最后给获取数据加上点击 可以查看你取到值了没有
package com.dzz.android24_contentresolver; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private ContentResolver cr; private EditText et_main; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main = (EditText) findViewById(R.id.et_main); //获取内容访问者 cr =getContentResolver(); } public void getData(View view){ if(TextUtils.isEmpty(et_main.getText())){ //查询所有 // //前面必须要加content:// uri = Uri.parse("content://com.dzz.android24_sqlite.person/persons"); }else{ //查询单个 String ss=et_main.getText().toString(); uri = Uri.parse("content://com.dzz.android24_sqlite.person/persons/"+ss); } Cursor cursor= cr.query(uri,null,null,null,null); //查询单个 // 1. 条件 id=1; // 2. 网页: // 3. URL 匹配器 while(cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("test",id+"___"+name+"+++"+age); Toast.makeText(this, id+"___"+name+"+++"+age, Toast.LENGTH_SHORT).show(); } } }
相关文章推荐
- 一个查询内容功能,动态添加内容,删除内容并提交的demo
- Android Cursor的问题 如何查询得到的内容很多,如何取其中的特定的一个
- Android实例demo12之contentprovide内容提供者与被提供者
- Android 使用ContentProvider(内容提供者)查询手机联系
- android内容提供者contentProvider_查询联系人
- day3-day4 android 内容提供者-观察者-listview -demo
- 创建一个内容提供者Creating a Content Provider——翻译总结自developer.android.com
- Android 创建一个私有的数据库(内容提供者)
- Android 拿系统提供的内容提供者(联系人)demo
- android 内容提供者查询单个使用URI匹配器
- 教你实现一个具备展开折叠功能的TextView(个人感觉github上的内容不错!https://github.com/r17171709/android_demo)
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容
- Android 利用内容提供者进行排序分页查询
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- android 桌面程序 滑动抽屉 SlidingDraw,一个小小的demo
- Android:一个简单查询界面的实现
- Android使用内容提供者方式进行存储
- Android 游戏框架(一个游戏角色在屏幕行走的demo)
- Android内容提供者源码