2013-04-07 2 views
0

Я работаю над приложением на базе SQLite. Все работает нормально, кроме операторов if-else в моем методе. Сохранение и прочее работает, просто проверка дает мне довольно высокое кровяное давление. Я надеюсь, что один из вас гораздо умнее, чем я, и считает, что, вероятно, очевидную ошибку я сделал:Если метод try-catch не работает должным образом

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"; 

} 

я это довольно грязный, я знаю

+1

В каком виде они не работают? Исключения, или просто не проверка? – christopher

+0

Приложение сбой, если я пытаюсь сохранить без ввода. –

+0

Требуется дополнительная информация. На данный момент я могу с уверенностью сказать, что вы должны использовать '&&' вместо '||' в своем первом операторе 'if'. –

ответ

2

Обращаясь комментарий в ответ:

Включите все || в && в первом if. В противном случае вы попытаетесь обработать все, даже если заполнено только одно поле.

Смежные вопросы