Как преодолеть проблему с предложением sqlite android?

Я пытаюсь прочитать данные из таблицы студентов, где столбец семестра равен элементу, выбранному из счетчика. слушателем является spinner.setOnItemSelectedListener. проблема в том, что он останавливает активность, когда я выбираю элемент счетчика. Он работает нормально, когда я удаляю WHERE CLAUSE., но я должен использовать WHERE CLAUSE. Пожалуйста помоги.

    public ArrayList<HashMap<String, String>> GetAllStudents(){
        ArrayList<HashMap<String, String>> userList = new ArrayList<>();
        try{
            SQLiteDatabase db = MyDB.getInstance(this).getReadableDatabase();


        String query = "SELECT * FROM Students WHERE semester="+selected;
        Cursor cursor = db.rawQuery(query,null);
        if(cursor.moveToFirst()) {
            while (cursor.moveToNext()) {
                HashMap<String, String> user = new HashMap<>();
                user.put("name", cursor.getString(0));
                user.put("roll", cursor.getString(1));
                user.put("semester", cursor.getString(2));
                user.put("pass", cursor.getString(3));
                userList.add(user);
            }
        }

    }
    catch (Exception e){
        Toast.makeText(this, "Error "+selected, Toast.LENGTH_SHORT).show();
    }
    return  userList;
}

РЕДАКТИРОВАТЬ

(код взят из комментариев, чтобы показать, откуда приходит выбранный)

String selected; 
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {    
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        selected=parent.getItemAtPosition(position).toString();
        loadStudents();
    }

    public void onNothingSelected(AdapterView<?> parent) { 
    }
});

loadStudents(); 

Можете ли вы поделиться своим сообщением в журнале ошибок? Также откуда берется selected?

Tepits 10.09.2018 10:32
Строка выбрана; sp.setOnItemSelectedListener (new AdapterView.OnItemSelectedListener () {public void onItemSelected (AdapterView <?> Parent, View view, int position, long id) {selected = parent.getItemAtPosition (position) .toString (); loadStudents ();} public void onNothingSelected (AdapterView <?> parent) {}}); loadStudents ();
Mr. Po 10.09.2018 12:25

selected - строковая переменная, и я использую ее, чтобы выбрать элемент из счетчика

Mr. Po 10.09.2018 12:28

Я вижу, что вы вызываете loadStudents, даже если пользователь ничего не выбирает. Это ожидаемое поведение? Я имею в виду, что у вас есть loadStudents внутри onItemSelected и за его пределами

sebasira 10.09.2018 13:43
0
4
31
1

Ответы 1

Я решил эту проблему, я просто пропустил '' вокруг выбранной переменной

Это решение Строковый запрос = "ВЫБРАТЬ * ИЗ СТУДЕНТОВ ГДЕ семестр = '" + выбранный + "'";

Другие вопросы по теме