+
50
-

Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before

andriod开发查询通话记录的时候报错,源码如下

    //获取通话记录
    private void getContentCallLog() {
        try{
            Cursor cursor = getContentResolver().query(callUri, // 查询通话记录的URI
                    columns
                    , null, null, CallLog.Calls.DEFAULT_SORT_ORDER// 按照时间逆序排列,最近打的最先显示
            );
            String str="";
            // Log.i(TAG,"cursor count:" + cursor.getCount());
            while (cursor.moveToNext()) {
                //String vname = cursor.getString(cursor.getColumnIndex("sub_id"));  //姓名

                String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));  //姓名
                String phoneid = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));  //姓名
                String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));  //号码
                String phoneconpid = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME));  //号码

                long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); //获取通话日期
                String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(dateLong));
                String time = new SimpleDateFormat("HH:mm").format(new Date(dateLong));
                int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));//获取通话时长,值为多少秒
                int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); //获取通话类型:1.呼入2.呼出3.未接
                String dayCurrent = new SimpleDateFormat("dd").format(new Date());
                String dayRecord = new SimpleDateFormat("dd").format(new Date(dateLong));

                str=str.concat(number+"#"+vname+"#"+phoneid+"#"+phoneconpid+"\n");
//            Log.i(TAG,"Call log: " + "\n"
//                    + "name: " + name +"\n"
//                    + "phone number: " + number  + "\n"
//
//            );
                 TextView bfws = findViewById(R.id.bfw);
                 bfws.setText(str);
            }
        }catch (Exception e){
            TextView bfws = findViewById(R.id.bfw);
            bfws.setText(e.getMessage());
        }


      //  TextView bfws = findViewById(R.id.bfw);
       // bfws.setText(str);
    }



高手回复

+
0
-
是不是columns这个字段中没有包含下面 while (cursor.moveToNext()) {中的字段,要保持一致
by ppzhuzhu
我知道答案,我要回答