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。そうしないと、フィールドが 1 つしか入力されていない場合でも、すべてを処理しようとします。

于 2013-04-07T12:27:02.287 に答える