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

创建一个新工程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);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值