为什么要引入ContentProvider
16lz
2021-01-23
为什么要引入ContentProvider?
Android提供了文件存储数据,文件的存储格式不受限制,但是这样不方便数据的管理。为了方便管理,我们一般采用xml文件存储数据。对于这样的数据操作,我们必须对其进行xml文件解析。
所以Android的Sharepreferences(共享参数的方式)由此诞生。它是xml文件的方式存储数据,存储在包下shared_prefs目录中,它提供了API方便我们对xml文件操作。
但是文件和共享参数的方式虽然可以方便的存储数据,这样的文件要被其他应用访问,又要修该源代码,这样对我们造成了不便。
所以ContentProvider由此应运而生。ContentProvider只需向外提供域名,其他应用通过相应的API即可对其操作。
文件方式如下:
Sharepreferences如下
ContentProvider方式如下:
Android提供了文件存储数据,文件的存储格式不受限制,但是这样不方便数据的管理。为了方便管理,我们一般采用xml文件存储数据。对于这样的数据操作,我们必须对其进行xml文件解析。
所以Android的Sharepreferences(共享参数的方式)由此诞生。它是xml文件的方式存储数据,存储在包下shared_prefs目录中,它提供了API方便我们对xml文件操作。
但是文件和共享参数的方式虽然可以方便的存储数据,这样的文件要被其他应用访问,又要修该源代码,这样对我们造成了不便。
所以ContentProvider由此应运而生。ContentProvider只需向外提供域名,其他应用通过相应的API即可对其操作。
文件方式如下:
public class SharePreferencesActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final SharedPreferences sharedPreferences = getSharedPreferences("jefry", Context.MODE_APPEND); Button save = (Button)findViewById(R.id.save); save.setOnClickListener(new View.OnClickListener() {public void onClick(View arg0) {Log.i("SharePreferencesActivity", Thread.currentThread().getName());Editor editor = sharedPreferences.edit();EditText nameEd = (EditText) findViewById(R.id.filename);EditText content = (EditText) findViewById(R.id.content); editor.putString("name",nameEd.getText().toString().trim()); editor.putInt("age", new Integer(content.getText().toString().trim())); editor.commit();//提交修改 } }); }}
Sharepreferences如下
public class SharePreferencesActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final SharedPreferences sharedPreferences = getSharedPreferences("jefry", Context.MODE_APPEND); Button save = (Button)findViewById(R.id.save); save.setOnClickListener(new View.OnClickListener() {public void onClick(View arg0) {Log.i ("SharePreferencesActivity", Thread.currentThread ().getName());Editor editor = sharedPreferences.edit();EditText nameEd = (EditText) findViewById(R.id.filename);EditText content = (EditText) findViewById(R.id.content); editor.putString("name",nameEd.getText().toString().trim()); editor.putInt("age", new Integer(content.getText().toString().trim())); editor.commit();//提交修改 } }); }}
ContentProvider方式如下:
public class PersonContentProvider extends ContentProvider {private static final UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);static {sMatcher.addURI("com.contentprovider.personprovider", "person", 1);sMatcher.addURI("com.contentprovider.personprovider", "person/#", 2);}public static final Uri CONTENT_URI = Uri.parse("conten://com.contentprovider.personprovider/person");@Overridepublic int delete(Uri uri, String arg1, String[] arg2) {return 0;}@Overridepublic String getType(Uri uri) {switch (sMatcher.match(uri)) {case 1:return "vnd.android.cursor.dir/person"; // List of items.case 2:return "vnd.android.cursor.item/person"; // Specific item.default:return null;}}@Overridepublic Uri insert(Uri uri, ContentValues values) {try {Log.i("PersonContentProvider", "type" + getType(uri));Log.i("PersonContentProvider", "insert test...");} catch (Exception e) {e.printStackTrace();}return null;}@Overridepublic boolean onCreate() {return true;}@Overridepublic Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3,String arg4) {// TODO Auto-generated method stubreturn null;}@Overridepublic int update(Uri uri, ContentValues arg1, String arg2, String[] arg3) {// TODO Auto-generated method stubreturn 0;}}//其他应用访问ContentProviderpublic class OutSideActivty extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ContentValues values = new ContentValues(); values.put("name", "emily"); this.getContentResolver().insert(Uri.parse("content://com.contentprovider.personprovider/person"), values); setContentView(R.layout.main); }}
更多相关文章
- Android应用开发揭秘(笔记) 第六章 Android数据存储
- Android中strings.xml文件
- 三种方式实现自定义圆形页面加载中效果的进度条
- Android Studio导入.so库文件方法
- 我的android 第12天 - 嵌入式关系型SQLite数据库存储数据
- Android显示PDF文件之iText
- Android中解析doc、docx、xls、xlsx格式文件
- Android中除了利用VideoView、Mediaplayer播放视频文件外,还可以
- Android 布局文件属性讲解