【问题标题】:showing error during debugging调试时显示错误
【发布时间】:2013-12-31 09:35:01
【问题描述】:

我在 onReceive 方法中有一个方法调用。

public void onReceive(Context context, Intent intent) {
        SaveCallLog();
}
public boolean SaveCallLog() 
    {
        info = new TelephonyInfo();
        imei1 = info.getImeiSIM1();

        imei2 = "";
        if (info.isDualSIM()) {
            imei2 = info.getImeiSIM2();
        }

        Uri uri = Uri.parse("content://call_log/calls");
        ContentResolver contentResolver = mContext.getContentResolver();

        // here change where condition to get only those call logs those are not sent before
        Cursor cursor = contentResolver.query(uri, null, null, null, "date DESC");
        {
            if (cursor != null && cursor.getCount() > 0) 
            {
                while (cursor.moveToNext()) 
                {
                    phNumber = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
                    callType = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
                    callDate = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
                    callDuration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));

                    dir = null;
                    int dircode = Integer.parseInt(callType);
                    switch (dircode)  
                    {
                        case CallLog.Calls.OUTGOING_TYPE:
                            dir = "OUTGOING";
                            break;
                        case CallLog.Calls.INCOMING_TYPE:
                            dir = "INCOMING";
                            break;
                        case CallLog.Calls.MISSED_TYPE:
                            dir = "MISSED";
                            break;
                        default:
                            dir = "REJECTED";
                    }
                    // here save the call log in your database to send them later
                    //String QS = "call&ImeiNo=" + "imei1" + "&ph=" + phNumber + "&duration=" + callDuration + "&date=" + callDate + "&cType=" + dir + "";
                 }



    cursor.close();
            Log.e("cursor", "here it is");

        }
        return true;    
    }

---->在调试时我到达了
ContentResolver contentResolver = mContext.getContentResolver(); 它把我从这个页面换掉了。

我为解决这些问题尝试了太多但无法理解出现这些问题的问题

【问题讨论】:

  • mContext 已初始化???

标签: android database-connection android-contentresolver


【解决方案1】:

mContext 没有初始化。所以它给你NullPointerException

像这样改变你的代码..

public void onReceive(Context context, Intent intent) {
    mContext=context;
    SaveCallLog();
}

添加此权限..在清单中

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

基于 OP 要求..

像这样更改您的代码并尝试..

// here change where condition to get only those call logs those are not
    // sent before
    Cursor cursor = contentResolver.query(uri, null, null, null,
            "date DESC");

    try {
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    phNumber = cursor.getString(cursor
                            .getColumnIndex(CallLog.Calls.NUMBER));
                    callType = cursor.getString(cursor
                            .getColumnIndex(CallLog.Calls.TYPE));
                    callDate = cursor.getString(cursor
                            .getColumnIndex(CallLog.Calls.DATE));
                    callDuration = cursor.getString(cursor
                            .getColumnIndex(CallLog.Calls.DURATION));

                    dir = null;
                    int dircode = Integer.parseInt(callType);
                    switch (dircode) {
                    case CallLog.Calls.OUTGOING_TYPE:
                        dir = "OUTGOING";
                        break;
                    case CallLog.Calls.INCOMING_TYPE:
                        dir = "INCOMING";
                        break;
                    case CallLog.Calls.MISSED_TYPE:
                        dir = "MISSED";
                        break;
                    default:
                        dir = "REJECTED";
                    }
                } while (cursor.moveToNext());
            }
        }
    } catch (Exception e) {
        // TODO: handle exception
    }

【讨论】:

  • 谢谢,这个问题已经解决了,但是现在它从 if 语句中停止了
  • @Anjali 找到解决方案了吗??
  • @Anjali,如果你的第一个问题被这个答案解决了,那么老实说你应该先接受答案然后继续。
  • 12-31 04:50:53.607:E/SoundPool(284):错误加载 /system/media/audio/ui/Effect_Tick.ogg
  • 运行时意外关闭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多