0

我有一个从 sqlite 数据库中检索行并在游标中返回它们的方法。我正在从查询中检索值,如下所示。

    private void checkWatchList() {
    Log.i("watch list", "watch list started");
    Cursor cursor = null;
    try {
        cursor = dbhandler.getAlerts();
        while (cursor.moveToNext()) {
            Log.i("watch list", "checked");

            String share_name = cursor.getString(cursor
                    .getColumnIndex(KEY_SHARE_NAME));
            String max_price = cursor.getString(cursor
                    .getColumnIndex(KEY_MAX_PRICE));
            String min_price = cursor.getString(cursor
                    .getColumnIndex(KEY_MIN_PRICE));
            int action = cursor.getInt(cursor.getColumnIndex(KEY_ACTION));
            Log.i("name", share_name + "/" + min_price + "/" + max_price);

            if (min_price.equalsIgnoreCase("null")) {
                Log.i("min", "msg");
                double maxprice = Double.parseDouble(max_price);
                compareMax(share_name, maxprice, action);
            } else if (max_price.equalsIgnoreCase("null")) {
                Log.i("max", "msg");
                double minprice = Double.parseDouble(min_price);
                compareMin(share_name, minprice, action);
            } else {
                Log.i("minmax", "msg");
                double maxprice = Double.parseDouble(max_price);
                double minprice = Double.parseDouble(min_price);
                compareMinMax(share_name, minprice, maxprice, action);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        cursor.close();
    }
}

问题是

在检查列值时null。例如对于具有值的行(KEY_SHARE_NAME=name,KEY_MAX_PRICE=12,KEY_MIN_PRICE=null),程序会引发一个null pointer exceptiuon at "else if (max_price.equalsIgnoreCase("null"))"部分。我做错了什么?我似乎无法指出确切的问题。

4

3 回答 3

4

"null"并且null不一样。"null"是一个字符串,并在 Javanull中的什么是 null 中了解更多信息?. 所以你不能做空检查。阅读如何在 java 中检查字符串是否为 null?min_price.equalsIgnoreCase("null")


改变

if (min_price.equalsIgnoreCase("null")) {
                Log.i("min", "msg");
                double maxprice = Double.parseDouble(max_price);
                compareMax(share_name, maxprice, action);
            } else if (max_price.equalsIgnoreCase("null")) {
                Log.i("max", "msg");
                double minprice = Double.parseDouble(min_price);
                compareMin(share_name, minprice, action);
            } 

if (min_price == null) {
                Log.i("min", "msg");
                double maxprice = Double.parseDouble(max_price);
                compareMax(share_name, maxprice, action);
            } else if (max_price == null) {
                Log.i("max", "msg");
                double minprice = Double.parseDouble(min_price);
                compareMin(share_name, minprice, action);
            } 
于 2013-09-11T13:38:00.320 回答
2

null和字符串"null"不是一回事。因此,例如此代码:

min_price.equalsIgnoreCase("null")

应改为:

min_price == null
于 2013-09-11T13:39:02.903 回答
1
min_price.equalsIgnoreCase("null")

如果 min_price 为空,将抛出 NullPointerException。

此外,上述语句与字符串“null”进行比较。您想将其与空引用进行比较。

min_price == null在这种情况下使用

于 2013-09-11T13:39:26.900 回答