Запрос Android SQLite со строками WHERE, переданными Intent, не работает

Я разрабатываю простое приложение для хранения рецептов для Android. Я новичок в программировании для Android. У меня есть два действия: в первом вы проверяете и вводите переменные поиска, а во втором — ListView. Рецепты можно искать по значениям их названий, сложности и типа блюда, используя этот метод:

public class DatabaseManager
{
 // other class stuff
 public Cursor getMatchingRecipes(String name, String difficulty, String recipeType)
 {
  // this method has been tested and works fine, the query itself works fine
 }
}

Я создаю намерение запустить действие ListView следующим образом:

//code from the SearchParametersActivity
Intent intent = new Intent(this, RecipesListActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", name); // name is a String variable with value from an EditText
bundle.putString("difficulty", difficulty.toString()); // from a Spinner
bundle.putString("type", type.toString()); // from a Spinner
bundle.putInt("action", DatabaseManager.GET_SEARCH);
intent.putExtras(bundle);
startActivity(intent);

cursor = dbManager.getMatchingRecipes(name, difficulty, type); // calling this from this activity works fine and gives me the correct entries from the database

И вызов запроса из второго действия следующим образом:

//code from the RecipesListActivity
dbManager.open();
String name = getIntent().getExtras().getString("name");
String difficulty = getIntent().getExtras().getString("difficulty");
String type = getIntent().getExtras().getString("type");
cursor = dbManager.getMatchingRecipes(name, difficulty, type); // NOT WORKING

Этот запрос всегда дает пустой курсор. Я уже проверил правильность передачи строк — все они печатаются одинаково в обоих действиях. Однако, если я ввожу те же точные строковые значения вручную, я получаю правильный результат.

String name1 = "egg";
String difficulty1 = "EASY";
String type1 = "MAIN_COURSE";

cursor = dbManager.getMatchingRecipes(name1, difficulty1, type1); // WORKS

Аналогичный метод, который возвращает все строки базы данных, отлично работает в обоих действиях, поэтому я, должно быть, делаю какую-то ошибку при передаче значений через намерение. Это оставляет меня в неведении, любая помощь будет принята с благодарностью.


person mmodrz    schedule 09.09.2013    source источник


Ответы (1)


Попробуйте так

Intent intent = new Intent(this, RecipesListActivity.class);
Bundle bundle = new Bundle();
bundle.putExtra("name", name); // name is a String variable with value from an EditText
bundle.putExtra("difficulty", difficulty.toString()); // from a Spinner
bundle.putExtra("type", type.toString()); // from a Spinner
bundle.putExtra("action", DatabaseManager.GET_SEARCH);

startActivity(intent);

//код из RecipesListActivity

dbManager.open();
String name = getIntent().getStringExtra("name");
String difficulty = getIntent().getStringExtra("difficulty");
String type = getIntent().getStringExtra("type");
person Biraj Zalavadia    schedule 09.09.2013
comment
Я пробовал вызывать dbManager.open() (и dbManager.close()) в разных местах, думая, что это может быть проблема со многими активными соединениями с базой данных одновременно, но это не дало никакого эффекта. Спасибо за ваш ответ! - person mmodrz; 09.09.2013