为什么要引入ContentProvider

[size=large][b]为什么要引入ContentProvider?[/b] [/size]
[size=large]Android提供了文件存储数据,文件的存储格式不受限制,但是这样不方便数据的管理。为了方便管理,我们一般采用xml文件存储数据。对于这样的数据操作,我们必须对其进行xml文件解析。
所以Android的Sharepreferences(共享参数的方式)由此诞生。它是xml文件的方式存储数据,存储在包下shared_prefs目录中,它提供了API方便我们对xml文件操作。
但是文件和共享参数的方式虽然可以方便的存储数据,这样的文件要被其他应用访问,又要修该源代码,这样对我们造成了不便。
所以ContentProvider由此应运而生。ContentProvider只需向外提供域名,其他应用通过相应的API即可对其操作。[/size]

文件方式如下:

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");

@Override
public int delete(Uri uri, String arg1, String[] arg2) {

return 0;
}

@Override
public 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;
}
}

@Override
public 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;
}

@Override
public boolean onCreate() {
return true;
}

@Override
public Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3,
String arg4) {
// TODO Auto-generated method stub
return null;
}

@Override
public int update(Uri uri, ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
return 0;
}

}

//其他应用访问ContentProvider
public 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);
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值