ContentProvider将程序中的数据暴露给其他程序访问
2016-03-17 13:55
381 查看
之前写过一篇文章,这里写链接内容讲的是如何运用ContentProvider。这次我将来演示一遍如何将程序中的数据暴露给其他程序访问。
就用我之前写过的AccountMS的数据这里写链接内容。现在我在dao目录下增加MyProvider.java文件,代码如下:
然后在AndroidManifest.xml需要配置Provider,将自己的数据暴露出来:
然后先建一个项目AccountReader来读取数据:
xml里面就一个Button和TextView
MainActivity代码如下:
展示一下最后的结果:
就用我之前写过的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()); } }); } }
展示一下最后的结果:
相关文章推荐
- YII2.0 详情介绍
- 一步一步部署Laravel项目
- 经典排序算法(PHP)
- php中的get_called_class()方法
- 500 Internal Server Error php
- thinkphp模板显示默认时间
- PHP正则表达式总结
- mac环境brew安装freetype,imagick等yii2所需要的库
- DTP中过滤写例程 取今天
- thinkphp中order用法
- thinkphp中取部分字段用法
- thinkphp-3
- php随机生成手机短信验证码
- PHPStorm IDE 快捷键(MAC)
- PHP 时间格式
- zendstudio 破解
- unix 域套接字 socketpari()
- PHP 函数作为参数 及其序列化
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(二)用ffmpeg解码音频
- 关于PHP中Session文件过多的问题及session文件保存位置