0

我正在开发一个基于 SQLite 的应用程序。一切正常,除了我的方法中的 if-else 语句。储蓄和东西有效,只是检查给了我一个相当高的血压。我希望你们中的一个人比我聪明得多,并且发现我犯的可能明显的错误:

public void save() {

        // get length of EditText
        int dateLength, mileageLength, amountLength, lpriceLength, tpriceLength;

        dateLength = date_widget.getText().length();
        mileageLength = mileage_widget.getText().length();
        amountLength = amount_widget.getText().length();
        lpriceLength = price_widget.getText().length();
        tpriceLength = totalPrice_widget.getText().length();

        // Start save method if EditTexts are not empty.

        if (dateLength > 0 || mileageLength > 0 || amountLength > 0
                || lpriceLength > 0 || tpriceLength > 0) {

            // Get the value of each EditText and write it into the
            // String/doubles

            String date = date_widget.getText().toString();
            double mileage = Double
                    .valueOf(mileage_widget.getText().toString());
            double amount = Double.valueOf(amount_widget.getText().toString());
            double lprice = Double.valueOf(price_widget.getText().toString());
            double tprice = Double.valueOf(totalPrice_widget.getText()
                    .toString());

            // Check if mileage is increasing, else cancel and show toast
            int checkMileage = Integer.parseInt(db
                    .getSearchResult("mileage", 0));

            if (checkMileage < mileage) {

                try {
                    // if (id == null) {
                    db.insert(date, mileage, amount, lprice, tprice);

                    Toast.makeText(this, R.string.action_input_saved,
                            Toast.LENGTH_SHORT).show();
                    finish();

                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(this, "ERROR " + e, Toast.LENGTH_LONG)
                            .show();
                }

            } else {
                Toast.makeText(
                        this,
                        "Your current mileage must be more than the last saved mileage",
                        Toast.LENGTH_LONG).show();
            }

        } else {
            Toast.makeText(this, "finish your input", Toast.LENGTH_LONG).show();
        }

    }

我在 DbAdapter 类中的方法:

public String getSearchResult(String sql, int cmd) {

    if (cmd == 0) {
        String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME
                + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.moveToFirst();

        String tmp = cursor.getString(0);
        cursor.close();

        // return count
        return tmp;
    } else if (cmd == 1) {
        int sum = 0;
        String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME;
        String idQuery = "SELECT _id FROM " + TABLE_NAME
                + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
        Cursor cursor = db.rawQuery(countQuery, null);
        Cursor id = db.rawQuery(idQuery, null);
        // berechnung
        cursor.moveToFirst();
        id.moveToFirst();

        int maxId = Integer.parseInt(id.getString(0));
        for (int i = 0; i < maxId; i++) {

            int tmp = Integer.parseInt(cursor.getString(0));
            sum = sum + tmp;
            cursor.moveToNext();
        }
        cursor.close();
        id.close();
        return String.valueOf(sum);
    } else if (cmd == 2 && sql == "mileage") {
        int sum = 0;
        String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME;
        String idQuery = "SELECT _id FROM " + TABLE_NAME
                + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
        Cursor cursor = db.rawQuery(countQuery, null);
        Cursor id = db.rawQuery(idQuery, null);
        // berechnung
        cursor.moveToFirst();
        id.moveToFirst();

        int maxId = Integer.parseInt(id.getString(0));
        if (maxId > 1) {
            int array[] = new int[maxId];

            // Array füllen
            for (int i = 0; i < maxId; i++) {

                array[i] = Integer.parseInt(cursor.getString(0));
                // sum = sum + tmp;
                cursor.moveToNext();
            }
            for (int k = 1; k < maxId; k++) {
                int tmp;
                tmp = array[k] - array[k - 1];
                sum = sum + tmp;
            }

            cursor.close();
            id.close();
            return String.valueOf(sum);
        } else {
            return "--";
        }

    }
    return "Wrong CMD";

}

我很乱,我知道

4

1 回答 1

2

将评论变成答案:

全部切换||&&您的第一个if. 否则,即使只填写了一个字段,您也会尝试处理所有内容。

于 2013-04-07T12:27:02.287 回答