Próbuję upewnić się, że użytkownik wybrał kelner, jest (pierwszy, jeśli instrukcja) i że identyfikator jest ważny i odnosi się do rekordu w bazie danych (instrukcja IF).

Zbieram id z Number (GUI Text in Android) i wybierając wartość Number jak tak

 EditText waiter_id;
 waiter_id = (EditText) findViewById(R.id.waiter_id);

TextUtils.isEmpty(waiter_id.getText() Sprawdza, aby upewnić się, że wartość została wprowadzona i wyświetla wiadomość, jeśli nie działa.

Po nazwie metodę utworzoną w klasie DataBaseHelper isEmployee(String id), która korzysta z użytkownika id wprowadzony przez użytkownika, aby wyszukać bazę danych dla tego rekordu. Jeśli identyfikator nie zostanie znaleziony w bazie danych, należy wydawać się powiadomić użytkownika.

Zamówienie OnClick Zamówiczość

order.setOnClickListener(new View.OnClickListener() {
            Order order;
            @Override
            public void onClick(View view) {
                if (TextUtils.isEmpty(waiter_id.getText())) {
                    Toast.makeText(OrderActivity.this, "Please select waiter id", Toast.LENGTH_SHORT).show();

                // This is where the method which returns the boolean is called using
                // the value in the Number field in xml file
                } else if (!dbHelp.isEmployee(String.valueOf(waiter_id))){
                    Toast.makeText(OrderActivity.this, "Id not valid", Toast.LENGTH_SHORT).show();
                }

              

        });

Metoda zapytania klasy bazy danych bazy danych

public Boolean isEmployee(String id){
    SQLiteDatabase db = this.getReadableDatabase();

    String findEmployeeUsingId = "SELECT * FROM " + EMP_TABLE +
            " WHERE " + ID_EMP + " = " + id;
    Cursor cursor = db.rawQuery(findEmployeeUsingId, null);


    if (cursor.getCount() == 0) {
        return false;
    }
    else
        return true;
}

Komunikat o błędzie, które otrzymuję:

com.example.dropit E/SQLiteLog: (1) near ".": syntax error in "SELECT * FROM EMP_TABLE WHERE ID = androidx.appcompat.widget.AppCompatEditText{93d8cbb VFED..CL. .F...... 249,193-829,317 #7f08011f app:id/waiter_id aid=1073741824}"

android.database.sqlite.SQLiteException: near ".": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM EMP_TABLE WHERE ID = androidx.appcompat.widget.AppCompatEditText{93d8cbb VFED..CL. .F...... 249,193-829,317 #7f08011f app:id/waiter_id aid=1073741824}

    at com.example.dropit.DataBaseHelper.isEmployee(DataBaseHelper.java:283)
    at com.example.dropit.OrderActivity$1.onClick(OrderActivity.java:58)
0
Dave 11 październik 2020, 17:32

1 odpowiedź

Najlepsza odpowiedź

waiter_id to EditText, a nie ciąg.
Kiedy zadzwonisz isEmployee() powinieneś przekazać swój tekst:

else if (!dbHelp.isEmployee(waiter_id.getText().toString()))

Użyj również symbolu zastępczego ? rawQuery() zamiast włączania parametru:

String findEmployeeUsingId = "SELECT * FROM " + EMP_TABLE + " WHERE " + ID_EMP + " = ?";
Cursor cursor = db.rawQuery(findEmployeeUsingId, new String[] {id});
1
forpas 11 październik 2020, 14:39