文档章节

ContentProvider(内容提供者)简单运用例子

初来小修
 初来小修
发布于 2016/01/25 21:41
字数 530
阅读 19
收藏 0

1、在配置清单里配置需要的权限

 

代码

 

 <uses-permission android:name="android.permission.READ_SMS"/>

 

 

 

========================================

 

2、布局界面有2个布局文件

 

activity_main.xml布局文件

 

代码

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView_main_smslist"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

    <TextView
        android:id="@+id/text_main_empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textColor="#00f"
        android:textSize="24sp"
        android:gravity="center"
        android:text="暂无短信信息!" />

</LinearLayout>

 

 

--------------------------

 

 

item_listview.xml布局文件

 

 

代码

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/text_item_address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="30dp"
        android:layout_toRightOf="@+id/imageView_item_icon"
        android:text="TextView" />

    <TextView
        android:id="@+id/text_item_body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView_item_icon"
        android:layout_alignLeft="@+id/text_item_address"
        android:text="TextView" />

    <TextView
        android:id="@+id/text_item_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />

</RelativeLayout>

 

 

=====================================

 

 

3、MainActivity 类

 

代码

 

 

public class MainActivity extends Activity {

 private ListView listview;
 private Cursor cursor;
 private TextView text_empty;
 private String uri_sms = "content://sms";
 private MyAdapter adapter;
 private List<Map<String, String>> list;

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

  this.listview = (ListView) this
    .findViewById(R.id.listView_main_smslist);
  this.text_empty = (TextView) this.findViewById(R.id.text_main_empty);
  listview.setEmptyView(text_empty);

  ContentResolver resolver = getContentResolver();// 内容提供者的一个方法
  cursor = resolver.query(Uri.parse(uri_sms), new String[] { "_id",
    "address", "body", "type", "date" }, null, null, null);
  list = select(cursor);

  adapter = new MyAdapter(list);
  listview.setAdapter(adapter);
 }
 // 查询方法
 public List<Map<String, String>> select(Cursor cursor) {
  List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  while (cursor.moveToNext()) {
   Map<String, String> map = new HashMap<String, String>();
   for (int i = 0; i < cursor.getColumnCount(); i++) {
    map.put(cursor.getColumnName(i), cursor.getString(i));
   }
   list.add(map);
  }
  return list;
 }

 class MyAdapter extends BaseAdapter {
  List<Map<String, String>> list;

  public MyAdapter(List<Map<String, String>> list) {
   this.list = list;
  }

  @Override
  public int getCount() {
   return this.list.size();
  }

  @Override
  public Object getItem(int position) {
   return this.list.get(position);
  }

  @Override
  public long getItemId(int position) {
   return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   ViewHolder viewholder = null;
   if (convertView == null) {
    viewholder = new ViewHolder();
    convertView = getLayoutInflater().inflate(
      R.layout.item_listview, null);

    viewholder.text_address = (TextView) convertView
      .findViewById(R.id.text_item_address);
    viewholder.text_body = (TextView) convertView
      .findViewById(R.id.text_item_body);
    viewholder.text_date = (TextView) convertView
      .findViewById(R.id.text_item_date);
    viewholder.image_type = (ImageView) convertView
      .findViewById(R.id.imageView_item_icon);

    convertView.setTag(viewholder);
   } else {
    viewholder = (ViewHolder) convertView.getTag();
   }
   // 设置 数据到listview
   viewholder.text_address.setText(list.get(position).get("address"));
   viewholder.text_body.setText(list.get(position).get("body"));
   // 格式化获取到的 时间
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
   long date = Long.parseLong(list.get(position).get("date"));
   String text_date = sdf.format(new Date(date));
   viewholder.text_date.setText(text_date);

   int type = Integer.parseInt(list.get(position).get("type"));
   switch (type) {
   case 1:
    viewholder.image_type.setImageResource(R.drawable.file);
    break;
   case 2:
    viewholder.image_type.setImageResource(R.drawable.folder);
    break;
   }
   return convertView;
  }
  class ViewHolder {
   private TextView text_address;
   private TextView text_body;
   private TextView text_date;
   private ImageView image_type;
  }
 }
}



© 著作权归作者所有

初来小修
粉丝 4
博文 117
码字总数 80711
作品 0
广州
私信 提问
Android使用内容提供者方式进行存储

内容提供者(ContentProvider)主要作用是对外共享数据,如果数据通过内容提供者对外共享了,那么其他应用就可以从内容提供者中查询到数据,并且可更新数据、删除数据、添加数据,如果采用文件...

IBMdW
2011/09/26
715
0
Android四大组件之ContentProvide(内容提供者)

访问私有数据库 创建一个项目,在项目中利用SQLiteOpenHelper创建一个名称为account的数据库,并在数据库中创建一张名为info的表。 在MainActivity中需要调用以下代码才能创建数据库: 运行程...

早早的太阳
2016/09/25
6
0
Android 四大组件(三)ContentProvider

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/75299025 这篇主要介绍下ContentProvider如何实现共享数据、及ContentResolver如何访问其他进程等数据。 ContentProvi...

VNanyesheshou
2017/07/18
0
0
Android四大组件ContentProvider

ContentProvider主要用于在不同应用程序之间实现数据共享功能。允许一个程序访问另一个程序,并保证被访数据的安全性。 Android系统自带的电话簿、短信、媒体库等提供了类似的接口。还可以通...

DouDouLee
2016/03/11
19
0
自定义ContentProvider(内容提供者)简单使用例子

功能:跨app访问本app数据库一些基本操作 本app中: 1、在配置清单里配置权限和自定义ContentProvider对外暴露给其他应用访问的路径 代码 <?xml version="1.0" encoding="utf-8"?> <manifest......

初来小修
2016/02/13
91
0

没有更多内容

加载失败,请刷新页面

加载更多

多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
2分钟前
0
0
解决Windows和Ubuntu时间不一致的问题

解决Windows和Ubuntu时间不一致的问题 问题原因是使用的时间不一致导致的。win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是。win10用的rtc ,ubuntu用的utc 在...

shzwork
4分钟前
0
0
mysql mysql三种插入数据语句和增删改方法

点开题目是不是有点懵X,因为你只知道insert...values这一种,重来没有听说过三种,现在来介绍一下。 插入数据三种方式: insert into 表名(字段名) values(插入值); 最常用的插入语句 inse...

edison_kwok
6分钟前
0
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
17分钟前
0
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部