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); }