专栏首页刘晓杰ContentProvider将程序中的数据暴露给其他程序访问

ContentProvider将程序中的数据暴露给其他程序访问

之前写过一篇文章,这里写链接内容讲的是如何运用ContentProvider。这次我将来演示一遍如何将程序中的数据暴露给其他程序访问。 就用我之前写过的AccountMS的数据这里写链接内容。现在我在dao目录下增加MyProvider.java文件,代码如下:

package com.example.accountsoft.dao;

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

public class MyProvider extends ContentProvider {
    private DBOpenHelper helper;
    private SQLiteDatabase db;

    public MyProvider() {
        super();
    }

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

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        helper = new DBOpenHelper(getContext());
        db = helper.getWritableDatabase();
        Cursor cursor = db.query("tb_inaccount", null, null, null, null, null, null, null);
        return cursor;
    }

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

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        return 0;
    }
}

然后在AndroidManifest.xml需要配置Provider,将自己的数据暴露出来:

        <provider 
            android:name="com.example.accountsoft.dao.MyProvider"
            android:exported="true"
            android:authorities="com.example.accountsoft.dao.MyProvider">
            <!-- exported选项表示是否能够被其他应用调用    -->
        </provider>

然后先建一个项目AccountReader来读取数据: xml里面就一个Button和TextView MainActivity代码如下:

package com.example.accountreader;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    private Button button;
    private TextView content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        content = (TextView)findViewById(R.id.textView1);

        button = (Button)findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                ContentResolver resolver = getContentResolver();

                Uri uri = Uri.parse("content://com.example.accountsoft.dao.MyProvider/tb_inaccount");
                //content+authorities+table_name
                Cursor cursor = resolver.query(uri, null, null, null, null);

                StringBuilder stringBuilder = new StringBuilder();
                while (cursor != null && cursor.moveToNext()) {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    double money = cursor.getDouble(cursor.getColumnIndex("money"));
                    stringBuilder.append(id+"+"+money+"\n");
                }
                content.setText(stringBuilder.toString());
            }
        });
    }
}

展示一下最后的结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android四大组件之一Service

    以上就是实现IntentService类所需要的全部操作:无参构造方法和onHandleIntent()方法

    提莫队长
  • 使用html设计界面

    提莫队长
  • Android MVP 模式介绍与实战

    通常我们都用MVC。但是原有的MVC模式有一些短板。比如在android开发中,activity充当着MVC中Controller的角色,但是在实际开发中还需要...

    提莫队长
  • 谷歌地图与 NestedScrollView 滑动冲突

    一会儿,要翻墙;一会儿,网络不稳定,白屏了;一会儿,某些设备不支持 GMS 服务了。

    HLQ_Struggle
  • 使用html设计界面

    提莫队长
  • Java网络与多线程系列之1:实现一个简单的对象池

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    eguid
  • [android] 练习viewpagerindicator的使用(二)

    陶士涵
  • 在spring中使用自定义注解注册监听器

    接口回调 监听器本质上就是利用回调机制,在某个动作发生前或后,执行我们自己的一些代码。在Java语言中,可以使用接口来实现。 实现一个监听器案例 为了方便,直接...

    yawn
  • Android MVP 模式介绍与实战

    通常我们都用MVC。但是原有的MVC模式有一些短板。比如在android开发中,activity充当着MVC中Controller的角色,但是在实际开发中还需要...

    提莫队长
  • BaseAdapter简单用法

    BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及Gri...

    苦咖啡

扫码关注云+社区

领取腾讯云代金券