创建一个新工程LearnContentWrite,一个空的Activity |
创建一个类MyProvider extends ContentProvider,默认重写如下方法(我们发现其实ContentProvider非常类似数据库操作,所有我们就是使用ContentProvider来操作数据库的查询、删除、添加等操作): delete getType insert onCreate query update |
在LearnContentWrite中的AndroidManifest.xml添加允许外部调用的配置信息 |
<provider android:name="MyProvider" android:exported="true" android:authorities="com.czg.cp"></provider> 具体位置: |
<activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--设置exported="true"表示可以被外部调用 --> <provider android:name="MyProvider" android:exported="true" android:authorities="com.czg.cp"></provider>
|
MyProvider.java代码 |
public class MyProvider extends ContentProvider { public static final Uri URI=Uri.parse("content://com.czg.cp"); //与AndroidManifest.xml中声明的authorities保持一致 SQLiteDatabase database; @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Nullable @Override public String getType(Uri uri) { return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { database.insert("tab", "_id", values); // database.close(); return null; } @Override public boolean onCreate() { //第一个参数SQLite数据库名,第二个参数表示只能被当前这个类调用 database=getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE,null); database.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)"); return true; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor cursor = database.query("tab", null, null, null, null, null, null); return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } }
|
LearnContentWrite项目的MainActivity.java代码 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnWriteSQLite).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { goWriteSQLite(); } }); } private void goWriteSQLite() { ContentValues values=new ContentValues(); values.put("name","Java语言"); values.put("name","delphi语言"); values.put("name","C#语言"); values.put("name","VBScript语言"); getContentResolver().insert(MyProvider.URI,values); } }
|
先直接运行到手机或虚拟机中,并点击按钮 |
此时就会在手机系统的固定地方创建一个文件夹 Android系统的Data文件夹\内部的Data\找到我们的工程
|
此时通过Anroid Device Moniter工具我们可以看到。数据库已经创建成功 |
创建另外一个新工程LearnContentRead,一个空的Activity,LearnContentRead中的MainActivity.java代码 |
public class MainActivity extends AppCompatActivity { TextView textView; Uri URI=Uri.parse("content://com.czg.cp"); //与LearnContentWrite项目的Uri一致 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView= (TextView) findViewById(R.id.tvTextView); findViewById(R.id.btnReadContent).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { goReadContent(); } }); } private void goReadContent() { Cursor cursor=getContentResolver().query(URI,null,null,null,null); cursor.moveToFirst(); String value=""; for(int i=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); } }
|
|
android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)
最新推荐文章于 2021-09-27 20:59:32 发布