您的位置:首页 > 数据库 > SQL

android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)

2015-12-09 00:15 686 查看
创建一个新工程LearnContentWrite,一个空的Activity

创建一个类MyProviderextendsContentProvider,默认重写如下方法(我们发现其实ContentProvider非常类似数据库操作,所有我们就是使用ContentProvider来操作数据库的查询、删除、添加等操作):

delete

getType

insert

onCreate

query

update


在LearnContentWrite中的AndroidManifest.xml添加允许外部调用的配置信息

<providerandroid:name="MyProvider"android:exported="true"android:authorities="com.czg.cp"></provider>


具体位置:

<activityandroid:name=".MainActivity">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!--设置exported="true"表示可以被外部调用-->
<providerandroid:name="MyProvider"android:exported="true"android:authorities="com.czg.cp"></provider>



MyProvider.java代码

publicclassMyProviderextendsContentProvider{
publicstaticfinalUriURI=Uri.parse("content://com.czg.cp");//与AndroidManifest.xml中声明的authorities保持一致



SQLiteDatabasedatabase;
@Override
publicintdelete(Uriuri,Stringselection,String[]selectionArgs){
return0;
}

@Nullable
@Override
publicStringgetType(Uriuri){
returnnull;
}

@Nullable
@Override
publicUriinsert(Uriuri,ContentValuesvalues){
database.insert("tab","_id",values);
//database.close();
returnnull;
}

@Override
publicbooleanonCreate(){
//第一个参数SQLite数据库名,第二个参数表示只能被当前这个类调用
database=getContext().openOrCreateDatabase("mycp.db3",Context.MODE_PRIVATE,null);
database.execSQL("createtabletab(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL)");
returntrue;
}

@Nullable
@Override
publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder){
Cursorcursor=database.query("tab",null,null,null,null,null,null);
returncursor;
}

@Override
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs){
return0;
}
}


LearnContentWrite项目的MainActivity.java代码

publicclassMainActivityextendsAppCompatActivity{

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnWriteSQLite).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
goWriteSQLite();
}
});
}

privatevoidgoWriteSQLite(){
ContentValuesvalues=newContentValues();
values.put("name","Java语言");
values.put("name","delphi语言");
values.put("name","C#语言");
values.put("name","VBScript语言");

getContentResolver().insert(MyProvider.URI,values);

}
}


先直接运行到手机或虚拟机中,并点击按钮






此时就会在手机系统的固定地方创建一个文件夹

Android系统的Data文件夹\内部的Data\找到我们的工程

此时通过AnroidDeviceMoniter工具我们可以看到。数据库已经创建成功



创建另外一个新工程LearnContentRead,一个空的Activity,LearnContentRead中的MainActivity.java代码

publicclassMainActivityextendsAppCompatActivity{
TextViewtextView;
UriURI=Uri.parse("content://com.czg.cp");//与LearnContentWrite项目的Uri一致

@Override
protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.tvTextView);
findViewById(R.id.btnReadContent).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
goReadContent();
}
});
}

privatevoidgoReadContent(){
Cursorcursor=getContentResolver().query(URI,null,null,null,null);
cursor.moveToFirst();
Stringvalue="";
for(inti=0;i<cursor.getCount();i++){
value=cursor.getString(cursor.getColumnIndex("name"));
System.out.println("第"+i+"个名字"+value);
Toast.makeText(this,value,Toast.LENGTH_SHORT).show();
cursor.moveToNext();

}
textView.setText(value);
}
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: