调试时不要使用引用来断点

博客讲述了一段代码调试问题,将数据库文件pull出来用Navicat查看存在特定记录,但代码调试却没有。经分析发现代码对name作引用,编译链接后无二进制指令,仅起变量引用作用。解决方案是将变量申明初始化放外边,在if中赋值。

问题代码:

String sortOrder = "_id DESC";
Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, null, null, null, sortOrder);
if(null == cursor){
    return;
}
int count = cursor.getCount();
int tmp = 0;
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("_id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    if(name.equals("parkin")){
        String a = name;//此处断点,我想看下当name为"parkin"时,其他的值
    }
    String apn = cursor.getString(cursor.getColumnIndex("apn")).toLowerCase();
    String type = cursor.getString(cursor.getColumnIndex("type")).toLowerCase();
}
cursor.close();

然而我将 “content://telephony/carriers” 所指向的数据库 “/data/data/com.android.providers.telephony/databases/telephony.db” adb pull 出来,然后用 Navicat 查看,数据库中存在 name为”parkin” 的记录。尴尬了。怎么代码里面调试没有呢?

突然灵光一现,恍然大悟!!!

String a = name;

这一句代码是对 name 作引用,并没有指令,再编译链接后,不产生二进制指令,只是在编译是起到变量引用作用。

解决方案:

String sortOrder = "_id DESC";
Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, null, null, null, sortOrder);
if(null == cursor){
    return;
}
int count = cursor.getCount();
String a = null;
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("_id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    if(name.equals("parkin")){
        a = name;
    }
    String apn = cursor.getString(cursor.getColumnIndex("apn")).toLowerCase();
    String type = cursor.getString(cursor.getColumnIndex("type")).toLowerCase();
}
cursor.close();

将 a 的申明初始化放置在外边,然后在 if 中 使用给变量赋值。然后就可以了。
虽然只是一行代码,但其中的含义值得深思啊!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值