文档章节

CursorLoader简单使用例子信息查询

初来小修
 初来小修
发布于 2016/02/15 18:05
字数 550
阅读 176
收藏 0

CursorLoader:

         CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题。CursorLoader是Loader的子类,Loader可以移步加载数据;loader自己会监视数据源的变化并且会主动上报;当发生配置上的变化,重新生成的loader会自动连接到变化前的cursor,这样就避免再查一次数据库。

 

1、在配置清单里添加查询信息的权限

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

 

 

 

 2、res/layout下2个布局文件activity_main.xml和item_activity.xml布局

 

 

activity_main.xml布局

 

代码

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

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

</RelativeLayout>

 

 

 

 

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

 

 

 

item_activity.xml布局

 

代码

 

 

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

    <TextView
        android:id="@+id/text_phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />
    <TextView
        android:id="@+id/text_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

</LinearLayout>

 

 

 

 

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

 

 

 

3、MainActivity.java类

 

代码

 

 

 

//需要实现接口LoaderCallbacks然后重写接口里的方法
public class MainActivity extends FragmentActivity implements
  LoaderCallbacks<Cursor> {

 private ListView listView;
 private SimpleCursorAdapter adapter;
 private String uri_sms = "content://sms";//访问信息数据库的uri
 private LoaderManager loaderManager;

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

  this.listView = (ListView) this.findViewById(R.id.listview);

  // 最后一个参数 标志 可以用CursorAdapter.出来
  //如果是FLAG_REGISTER_CONTENT_OBSERVER标志 则适配器会在Cursor上注册一个内容观察者
 //该观察者会时时刻刻观察内容的变动 如果通知到达时就调用onContentChanged()方法
  adapter = new SimpleCursorAdapter(this, R.layout.item_activity, cursor,
    new String[] {"body","address"},
    new int[] { R.id.text_phone, R.id.text_content },
    CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
  listView.setAdapter(adapter);
  loaderManager = getSupportLoaderManager();//获取加载管理器
  // initLoader -- 如果当前没有加载器就调用onCreateLoader创建一个 有就根据第一个参数标志重复利用
  // 第一个参数 -- 加载器的标志 随便写
  // 第二个参数 -- Bundle -- 用来传递数据 没有可以写null
  // 第三个参数 -- LoaderCallbacks 对象
  loaderManager.initLoader(1, null, this);
 }

 // ----------继承LoaderCallbacks接口要重写的方法---------------
 @Override// 创建一个Loade
 public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {

  return new CursorLoader(this, Uri.parse(uri_sms), null, null, null, "date desc");
 }

 @Override// Loader创建完成
 public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
  adapter.changeCursor(cursor);
 }

 @Override// 当一个加载器给重置时 调用
 public void onLoaderReset(Loader<Cursor> arg0) {
  adapter.changeCursor(null);
 }
}

 

© 著作权归作者所有

初来小修
粉丝 4
博文 117
码字总数 80711
作品 0
广州
私信 提问
android loader 详解

装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性: 它们对每个Activity和Fragment都有效。 他们提供了异步加载数据的能力。 它们监视数...

等待流星
2014/03/13
0
0
Android Loader 机制,让你的数据加载更加高效

前言 在 Android 中,任何耗时的操作都不能放在 UI 线程中,所以耗时的操作都需要使用异步加载来实现。其实,加载耗时数据的常用方式其实也挺多的,就让我们来看一下 1、Thread + Handler Th...

developerHaoz
2017/11/27
0
0
我心中的ANDROID REST CLIENT--9GAG

What is a good app 作为一名Android Developer,一直都想Make A Good App。很多次的我都在反问自己,我心中的Good App应该是什么样的呢?为了寻找答案,自己一直在产品、设计以及技术上都花...

android框架安卓
2018/07/05
0
0
我心中的Android REST Client--9gag

原文地址:http://stormzhang.github.io/android/2014/04/19/android-rest-client-9gag/ What is a good app 作为一名Android Developer,一直都想Make A Good App。很多次的我都在反问自己,......

stormzhang
2014/04/19
1K
4
Android 装载器---概要

在Android3.0中引入了装载器的功能,这使它很容易在Activity或Fragment中使用异步的方式加载数据。装载器的特点如下: 1. 装载器对于每个Activity和Fagment都是有效的; 2. 装载器提供异步数...

长平狐
2012/10/16
41
0

没有更多内容

加载失败,请刷新页面

加载更多

URL/URI/URN的认识

这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还...

WinkJie
4分钟前
0
0
vs2017 踩坑

好久没有使用vs2017,改了下代码,启动调试进行测试,一没有注意,就启动了。 然后 ,悲剧了,,,就有下面的问题。 VS断点提示:当前不会命中断点。还没有为该文档加载任何符号 然后百度了下,...

轻轻的走过
5分钟前
0
0
解决一个emqttd trace 无法打开的问题

emqttd这个东西做的真心不咋地,之前有emq_auth_mysql的plugin死活无法启动的问题,现在又碰到trace无法打开的问题。 查看emqttd服务器当前连接的所有client: emqttd_ctl clients list 要打...

莫在全
12分钟前
0
0
java wsdl 中不显示参数属性类型的问题解决方案

CXF3.0.1解决方案: 配合spring方式 <jaxws:endpoint id="receiveUMSMessageService" implementor="com.sw.extInterface.webservice.service.impl.ReceiveUMSMessageServiceImpl" address="......

嘿嘿嘿IT
15分钟前
0
0
go alpine docker image 搭建

Dockerfile 搭建 目录结构 --Dockerfile--main.go 写一个go的helloworld package mainimport ("fmt""log""net/http")func main() {http.HandleFunc("/", hello)err := ht......

solate
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部