1. 在执行context.getContentResolver.query()方法时出现错误。

07-15 18:46:13.470: E/AndroidRuntime(13624): FATAL EXCEPTION: AsyncTask #1
07-15 18:46:13.470: E/AndroidRuntime(13624): java.lang.RuntimeException: An error occured while executing doInBackground()
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.lang.Thread.run(Thread.java:856)
07-15 18:46:13.470: E/AndroidRuntime(13624): Caused by: java.lang.NullPointerException
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.os.Parcel.readException(Parcel.java:1333)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.content.ContentProviderProxy.query(ContentProviderNative.java:358)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.content.ContentResolver.query(ContentResolver.java:311)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at com.txrj.sms.manager.SmsDataManager2.getThreads(SmsDataManager2.java:25)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at com.txrj.sms.activity.ConversationListActivity$LoadThreadsTask.doInBackground(ConversationListActivity.java:92)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at com.txrj.sms.activity.ConversationListActivity$LoadThreadsTask.doInBackground(ConversationListActivity.java:1)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
07-15 18:46:13.470: E/AndroidRuntime(13624):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-15 18:46:13.470: E/AndroidRuntime(13624):     ... 5 more

下面红色部分代码是产生错误的地方。原因是根本无法从Telephony.Threads.CONTENT_URI中查询数据。

应该使用下面绿色部分的代码来实现查询threads表。

Cursor cursor = context.getContentResolver().query(Telephony.Sms.CONTENT_URI,
        new String[] {"* from threads order by date desc--"},
        null, null, null);

public static List<TxrjThreads> getThreads(Context context) {
    List<TxrjThreads> list = new ArrayList<TxrjThreads>();
    Cursor cursor = context.getContentResolver().query(Telephony.Threads.CONTENT_URI,
            new String[]{
                Telephony.Threads._ID,
                Telephony.Threads.DATE,
                Telephony.Threads.RECIPIENT_IDS,
                Telephony.Threads.MESSAGE_COUNT,
                Telephony.Threads.READ,
                Telephony.Threads.SNIPPET,
                Telephony.Threads.SNIPPET_CHARSET,
                Telephony.Threads.TYPE,
                Telephony.Threads.ERROR,
                Telephony.Threads.HAS_ATTACHMENT
                },
            null, null, Telephony.Threads.DATE + " desc");
    if (cursor != null && cursor.moveToFirst()) {
        do {
            TxrjThreads thread = new TxrjThreads();
            thread.setThreadId(getLong(cursor, Telephony.Threads._ID));
            thread.setTime(getLong(cursor, Telephony.Threads.DATE));
            thread.setRecipientId(getString(cursor, Telephony.Threads.RECIPIENT_IDS));
            thread.setMessageCount(getInt(cursor, Telephony.Threads.MESSAGE_COUNT));
            thread.setRead(getInt(cursor, Telephony.Threads.READ));
            thread.setSnippet(getString(cursor, Telephony.Threads.SNIPPET));
            thread.setSnippetCS(getInt(cursor, Telephony.Threads.SNIPPET_CHARSET));
            thread.setType(getInt(cursor, Telephony.Threads.TYPE));
        } while(cursor.moveToNext());
        cursor.close();
    }
    return list;
}

public static long getLong(Cursor cursor, String colunName) {
    return cursor.getLong(cursor.getColumnIndex(colunName));
}

public static int getInt(Cursor cursor, String colunName) {
    return cursor.getInt(cursor.getColumnIndex(colunName));
}

public static String getString(Cursor cursor, String colunName) {
    return cursor.getString(cursor.getColumnIndex(colunName));
}

2. 查看android.content.ContentResolver.query()方法源码。

public final Cursor query(Uri uri, String[] projection,
        String selection, String[] selectionArgs, String sortOrder) {
    IContentProvider provider = acquireProvider(uri);
    if (provider == null) {
        return null;
    }
    try {
        long startTime = SystemClock.uptimeMillis();
        Cursor qCursor = provider.query(uri, projection, selection, selectionArgs, sortOrder);
        if (qCursor == null) {
            releaseProvider(provider);
            return null;
        }
        // force query execution
        qCursor.getCount();
        long durationMillis = SystemClock.uptimeMillis() - startTime;
        maybeLogQueryToEventLog(durationMillis, uri, projection, selection, sortOrder);
        // Wrap the cursor object into CursorWrapperInner object
        return new CursorWrapperInner(qCursor, provider);
    } catch (RemoteException e) {
        releaseProvider(provider);
        return null;
    } catch(RuntimeException e) {
        releaseProvider(provider);
        throw e;
    }
}

3. 查找IContentProvider.java文件所在位置。

android4.2.2\android\frameworks\base\core\java\android\content

在执行context.getContentResolver.query()方法时出现错误。的更多相关文章

  1. 调用具体webservice方法时时报错误:请求因 HTTP 状态 503 失败: Service Temporarily Unavailable

    添加web引用会在相应项目的app.cofig文件中产生如下代码: <sectionGroup name="applicationSettings" type="S ...

  2. 在IE浏览器中执行OpenFlashChart的reload方法时无法刷新的解决方法

    由于项目需求,需要在网页上利用图表展示相关数据的统计信息,采用了OpenFlashChart技术.OpenFlashChart是一款开源的以Flash和Javascript为技术基础的免费图表,用它能 ...

  3. 执行JDBC的executeUpdate()方法时,报错:数据类型不一致,应为number,但却为binary

    该原因是因为,在拼写update语句的时候将一个number类型的字段的值赋为了null导致的,如果想将一个number类型的字清空,不能使用null,可以使用“”来替代.

  4. hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:

    hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Jo ...

  5. Context.managedQuery()和context.getContentResolver()获取Cursor关闭注意事项

    在获取图片缩略图时,获取游标并进行相关的操作. Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbna ...

  6. 执行发送邮件Send方法时,报错:邮箱不可用。 服务器响应为: 5.7.1 Unable to relay for xxx@xxx.com

    .net代码在执行发送邮件Send方法时,往往出现这个的报错: 邮箱不可用. 服务器响应为: 5.7.1 Unable to relay for xxx@xxx.com 这个问题应该是smtp的设置问 ...

  7. PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入

    1.安装 PDO 数据库抽象层 PDO - PHP Data Object 扩展类库为 PHP 访问数据库定义了一个轻量级的.一致性的接口,它提供了一个数据访问抽象层,针对不同的数据库服务器使用特定的 ...

  8. MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?

    原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...

  9. InfluxDB执行语句管理(query management)

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 17 部分: InfluxDB学习之InfluxDB的基本概念 InfluxDB学习之InfluxDB的基本操作 Influ ...

随机推荐

  1. BERT的开源实现的使用

    参考这篇文章: 小数据福音!BERT在极小数据下带来显著提升的开源实现 https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=224749 ...

  2. Nutch1.7学习笔记:基本环境搭建及使用

    Nutch1.7学习笔记:基本环境搭建及使用 作者:雨水,时间:2013-10-31博客地址:http://blog.csdn.net/gobitan 说明:Nutch有两个主版本1.x和2.x,它们 ...

  3. 解析eml文件

    之前使用lumisoft解析eml,总是会出现很奇怪的问题,所以改使用微软自家的com库,确实厉害兼容性更好,代码 string file = emailPath; CDO.Message oMsg ...

  4. CSS-图片不变形设置

    不管网页做的美还是丑,有一个问题始终是无法躲避的,就是有的时候会遇到图片变形的问题,之前遇到过这种问题解决过,不过还是整体的重新研究了一下图片,其中主要涉及到的知识点就是max-width和max-h ...

  5. JQuery实现可编辑的表格

    点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按Esc可取消编辑 第一种单击表格可以编辑的方法 //相当于在页面中的 body标签加上onload事件$(function() {    ...

  6. 零基础学python-7.2 字符串常量

    1.单双引號字符串是一样的 >>> 'abc',"abc" ('abc', 'abc') >>> 当你的python照着上面的样例来写,这个时候 ...

  7. 梯度消失(vanishing gradient)与梯度爆炸(exploding gradient)问题

    (1)梯度不稳定问题: 什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸. 原因:前面层上的梯度是来自于后面层上梯度的乘乘积.当存在过多的层次时,就出现了内在本质上 ...

  8. (转)Pixel-Fillrate显卡像素填充率

    [Pixel-Fillrate] “填充率“以每秒钟填充的像素点为单位,“三角形(多边形)生成速度“则表示每秒钟三角形(多边形)生成个数.现在的3D显卡的性能也主要看着两项指标,这两项指标的数值越大, ...

  9. Cocos2d-X研究之v3.x 事件分发机制具体解释

    事件分发机制 " src="http://www.cgzhw.com/wp-content/uploads/2014/07/inherent3.png" style=&q ...

  10. mysql zerofill 的使用

    转自:http://www.jquerycn.cn/blog/mysql/ 那这个int[M]中M是什么意义喃,在定义数值型数据类型的时候,可以在关键字括号内指定整数值(如:int(M),M的最大值为 ...