2013-04-07 40 views
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"; 

} 

我是相當混亂,我知道

+1

In What's not they not working?例外,或根本不檢查? – christopher 2013-04-07 12:24:06

+0

如果我嘗試保存沒有輸入的應用程序崩潰。 – 2013-04-07 12:25:53

+0

需要更多信息。現在我可以肯定地說你應該在你的第一個if語句中使用'&&而不是'||'。 – 2013-04-07 12:26:07

回答

2

談到評論到一個答案:

接通所有||&&在你的第一個if。否則,即使只填寫了一個字段,您也會嘗試處理所有內容。