为什么我的光标返回null?

时间:2013-08-02 09:52:48

标签: android android-contentprovider android-cursor

我在听众下方检测来电 我在来电之后每次向CallLog内容提供商发出询问 即使几秒钟之前已经记录了一个呼叫,我的光标也总是返回null 顺便说一下,我在eclipse中运行项目之前清除了我的通话记录 我希望能够在来电之后每次将我的光标指向第一行,但它只是不起作用

// Listener to detect incoming calls.

private class CallStateListener extends PhoneStateListener {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (previousState == TelephonyManager.CALL_STATE_RINGING
                && state == TelephonyManager.CALL_STATE_IDLE) {

            cursor = context.getContentResolver().query(
                    CallLog.Calls.CONTENT_URI, projection, null, null,
                    Calls.DEFAULT_SORT_ORDER);

            Log.i("SIZE OF CURSOR", String.valueOf(cursor.getCount()));

            if (cursor.moveToFirst()) {

            }// end if
        }// end if

        Log.i("onCallStateChanged",
                String.format("State changed to %d", state));

        previousState = state;

    }// end onCallStateChanged()
}// end CallStateListener class

Cursor cursor;
private String[] projection = new String[] { Calls.TYPE, Calls.NUMBER };

2 个答案:

答案 0 :(得分:3)

我类似地从通话后的日志中读取呼叫并遇到一些问题,但有一个有效的解决方案。有两件事需要考虑:

1)使用常量

时,我在某些设备上遇到了问题
CallLog.Calls.CONTENT_URI

请尝试直接使用URI字符串:

Uri.parse("content://call_log/calls")

2)在呼叫结束后,您正在快速读取呼叫记录,请在监听器中休眠1000毫秒,以便在查询之前更新呼叫记录。

答案 1 :(得分:0)

尝试使用本地Cursor变量, 〜。〜然后确保查询不返回null~.~