使用ContentProvider和ContentResolver实现应用程序间的数据共享

MyProvider项目中的MyProvider.java

package practise.lxm.myprodiver;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;

/**
 * Created by Administrator on 2015/4/9.
 * 提供Provider给其它程序调用
 */
public class MyProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        System.out.println("onCreate");
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        System.out.println("查询uri:" + uri.toString());
        return null;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        System.out.println("插入uri:" + uri.toString() + ";contentValue:" + values.getAsString("value"));
        return Uri.parse("content://testInsert");
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        System.out.println("删除uri:" + uri.toString() + ";删除条件" + selection );
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        System.out.println("更新uri:" + uri.toString() + ";contentValue:" + values.getAsString("value"));
        return 0;
    }
}

MyProvider项目中的AndroidManifest.xml中添加

 <provider
            android:authorities="lxm.practise.provider"
            android:name=".MyProvider"
            android:exported="true"/>

MyResolver中的MainActivity.java

package practise.lxm.hello;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

/**
 * 使用ContentResolver间接调用ContentProvider
 */
public class MainActivity extends Activity{

    ContentResolver contentResolver;
    Uri uri;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contentResolver = getContentResolver();
        uri = Uri.parse("content://lxm.practise.provider");
    }

    //新增
    public void insert(View v){
        ContentValues contentValues = new ContentValues();
        contentValues.put("value","insertValue");
        Uri insertUri = contentResolver.insert(uri,contentValues);
        Toast.makeText(MainActivity.this,"新加记录的Uri为:" + insertUri.toString(),Toast.LENGTH_LONG).show();
    }

    //删除
    public void delete(View v){
        int delCount = contentResolver.delete(uri,"delete where",null);
        Toast.makeText(MainActivity.this,"删除数量为:" + delCount ,Toast.LENGTH_LONG).show();
    }

    //修改
    public void update(View v){
        ContentValues contentValues = new ContentValues();
        contentValues.put("value","updateValue");
        int updateCount = contentResolver.update(uri,contentValues,"update where",null);
        Toast.makeText(MainActivity.this,"更新数量为:" + updateCount, Toast.LENGTH_LONG).show();
    }

    //查询
    public void query(View v){
        Cursor cursor = contentResolver.query(uri,null,"select where",null,null);
        Toast.makeText(MainActivity.this,"查询结果为:" + cursor,Toast.LENGTH_LONG).show();
    }

}
时间: 2024-10-29 05:50:05

使用ContentProvider和ContentResolver实现应用程序间的数据共享的相关文章

Android ContentProvider、ContentResolver和ContentObserver的使用

1.ContentProvider.ContentResolver和ContentObserver ContentProvider是Android的四大组件之一,可见它在Android中的作用非同小可.它主要的作用是:实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限.其实它也只是一个中间人,真正的数据源是文件或者SQLite等. 一个应用实现ContentProvider来提供内容

Android开发实践 ContentProvider和ContentResolver

1.关于ContentProvider和ContentResolver (1)ContentProvider(内容提供者) ContentProvider是不同应用程序之间进行数据交换的标准API,只提供数据的访问接口. ContentProvider以某种Uri形式对外提供数据,允许其他应用访问或修改数据,其他应用程序通过ContentResolver根据Uri去访问操作指定数据. 将一个字符串转换成Uri: Uri uri = Uri.parse("content://com.gc.cont

iOS应用程序间共享数据(转)

我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来分享数据,不过还是有些方法可以实现,为了方便说明,这里同时创建了两个工程Example1和Example2,实现这两个app之间的信息共享,Example1负责写数据,Example2负责读数据,具体的demo代码可以到这里获取 UIPasteboard 剪贴板是应用程序之间传递数据的简单方式,建议

使用ASP.NET State Server实现多应用程序间共享Session State

原以为ASP.NET State Server原生支持多程序间共享SESSION,以为在同一服务器上 & 同一根域名下部署的多个应用程序间设置了相同了<sessionState/>和<machineKey/>事情就成了! 事实证明是自己TOO YOUNG TOO SIMPLE.根本不WORK! BING了一大轮,再找了一下度娘,看到以下较有参考价值的文章: http://forums.asp.net/t/1759392.aspx?Share+sessions+between

程序间获取ALV显示数据(读取ALV GRID上的数据)

程序间获取ALV数据的两种方法: 方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点: * Execute transaction IA09 to get all Functional Location Tasklists SUBMIT riplko10 WITH SELECTION-TABLE lt_selscreen WITH pn_iflo = abap_true "Select Func L

iOS之程序间通讯

程序间通讯 1 设置程序标识,名字自己起, 2 在想要跳转的地儿 加入这行代码就可以 UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ProductTwo:"]]; 例如:one工程程序中:(调用openURL) // // ViewController.m // 程序间通讯OneProduct // // Created by dllo on 16/3/24. // Copyright © 2016年 H

【转】在Java与C程序间进行socket通信的讨论

1. 背景 使用socket在Java程序与C程序间进行进程间通信.本文主要描述了在同C程序进行通信的Client端的Java实现功能. 1.1. 使用的语言 Client端:Java,JVM(JDK1.3) Server端:C,UNIX(Sun Solaris) 1.2. 讨论范围 数据发送:只涉及到Java中int整型系列的讨论,包括byte,short,int. 数据接受:涉及到byte,short,int,long,float,double,char. 1.3.Java与C的数据类型的比

iOS程序间使用URL scheme通信

由于iOS的沙盒机制,程序之间通信受到限制,还好iOS可以很方便的注册自己程序的 URL scheme,因此可以通过打开特定的URL scheme来实现程序间通信传递参数. 1.新建A程序,并注册 URL scheme: 在程序的 Info.plist 添加一个 URL types 节点就可以了.注意结构体顺序不要搞乱 ,因为我之前结构体顺序不对,一直跳转不成功. 这样就注册好了scheme. 2.新建B程序,然后在B中打开A. 我们可以看到通过点击这个按钮之后,就跳转到A去了.(同理:当你的程

iOS程序间使用scheme通信

在 iOS 里,由于沙盒机制,程序之间都是相互隔离,所以想要从一个程序跳转到另一个程序一般情况是做不到,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个程序,并启动它. 1.首先在A程序中注册scheme, 注意结构体不要搞乱,我开始就是因为结构体顺序不对,导致一直跳转 不成功. 这样的话就设置成功了scheme了.接下来就是去B程序调用该程序了. 2.新建一个B程序,调用A 新建一个button,添加点击事件 当点击该按