Отображение результатов поиска sqlite в recyclerview
Я получаю следующую ошибку :
Ява.яз.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.Виджет TextView.помощью setText(Ява.яз.CharSequence)' по ссылке на нулевой объект
Это происходит на этой линии
держатель.myTextView.помощью setText(itemRecipe.вам(должность).toString());
Я прошел через несколько шагов по устранению неполадок для этого и не уверен, что еще попробовать или если база данных даже работает, причина, по которой я хочу, чтобы это работало.
Что я уже пробовал:
RecyclerAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { private List<RecipeList> itemRecipe; private LayoutInflater mInflater; private ItemClickListener mClickListener; // data is passed into the constructor RecyclerViewAdapter(Context context, List<RecipeList> data) { this.mInflater = LayoutInflater.from(context); this.itemRecipe = data; } // inflates the row layout from xml when needed @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.fragment_item, parent, false); return new ViewHolder(view); } // binds the data to the TextView in each row @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.myTextView.setText(itemRecipe.get(position).toString()); } // total number of rows @Override public int getItemCount() { return itemRecipe.size(); } // stores and recycles views as they are scrolled off screen public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView myTextView; ViewHolder(View itemView) { super(itemView); myTextView = itemView.findViewById(R.id.listIngredient); itemView.setOnClickListener(this); } @Override public void onClick(View view) { if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); } } // allows clicks events to be caught void setClickListener(ItemClickListener itemClickListener) { this.mClickListener = itemClickListener; } // parent activity will implement this method to respond to click events public interface ItemClickListener { void onItemClick(View view, int position); } }
Основной класс
public class Recipe extends MainActivity { TabLayout tabLayout; ImageView recipeImage; TextView descriptionText, courseText, servingsText, costText, caloriesText, methodText; RecyclerView listIngredient; SQLiteDatabase db; String search_name; Cursor c; RecyclerViewAdapter adapterRecipe; List<RecipeList> itemRecipe = new ArrayList<>(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recipe); //search_name = getIntent().getStringExtra("NAME"); search_name = "Speedy chicken couscous"; loadRecipe(); //recyclerview Recipe adapterRecipe = new RecyclerViewAdapter(this, itemRecipe); listIngredient = findViewById(R.id.listIngredient); RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); listIngredient.setLayoutManager(mLayoutManager); listIngredient.setItemAnimator(new DefaultItemAnimator()); listIngredient.setAdapter(adapterRecipe); } public void loadRecipe() { itemRecipe.clear(); db = (new DatabaseManager(this).getWritableDatabase()); String RECIPE_SEARCH = " SELECT A.recipe, A.ingredient_quantity, B.measurement_name, B.ingredient_name, B.description " + "FROM " + DatabaseManager.TABLE_QUANTITY + " AS A JOIN " + DatabaseManager.TABLE_INGREDIENTS + " AS B ON A.ingredient = B.ingredient_name"; String selectQuery = ""; selectQuery = RECIPE_SEARCH + " WHERE A.recipe LIKE ?"; c = db.rawQuery(selectQuery, new String[]{"%" + search_name + "%"}); if (c.moveToFirst()) { do { RecipeList recipeList = new RecipeList(); recipeList.setRecipe(c.getString(c.getColumnIndex("recipe"))); recipeList.setIngredient_amount(c.getString(c.getColumnIndex("ingredient_quantity"))); recipeList.setMeasurement_name(c.getString(c.getColumnIndex("measurement_name"))); recipeList.setIngredient_name(c.getString(c.getColumnIndex("ingredient_name"))); recipeList.setDescription(c.getString(c.getColumnIndex("description"))); itemRecipe.add(recipeList); } while (c.moveToNext()); c.close(); } } }
Класс RecipeList
public class RecipeList { private Integer id; private Double ingredient_quantity; private String recipe; private String measurement_name; private String ingredient_name; private String description; private String ingredient_amount = String.valueOf(ingredient_quantity); public RecipeList(){ } public RecipeList(String recipe, String ingredient_amount, String measurement_name, String ingredient_name, String description) { this.recipe = recipe; this.ingredient_amount = ingredient_amount; this.measurement_name = measurement_name; this.ingredient_name = ingredient_name; this.description = description; } public String getRecipe() { return recipe; } public void setRecipe(String recipe) { this.recipe = recipe; } public String getIngredient_amount() { return ingredient_amount; } public void setIngredient_amount(String ingredient_amount) { this.ingredient_amount = ingredient_amount; } public String getMeasurement_name() { return measurement_name; } public void setMeasurement_name(String measurement_name) { this.measurement_name = measurement_name; } public String getIngredient_name() { return ingredient_name; } public void setIngredient_name(String ingredient_name) { this.ingredient_name = ingredient_name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "RecipeList{" + "id=" + id + ", ingredient_quantity=" + ingredient_quantity + ", recipe='" + recipe + '\'' + ", measurement_name='" + measurement_name + '\'' + ", ingredient_name='" + ingredient_name + '\'' + ", description='" + description + '\'' + ", ingredient_amount='" + ingredient_amount + '\'' + '}'; } }
David Crow
Это не имеет никакого отношения к базе данных. Это имеет самое непосредственное отношение к myTextView
существование null
- Вы уже вступили в игру? ViewHolder
конструктор, чтобы увидеть, что возвращается из findViewById()
?
Я ничего не вижу try/catch
блоки в вашем коде. Это намеренно?
Rhys Owain Evans
Я очень новичок в этом и не уверен, что вы имеете в виду, где будут блоки try/catch?
David Crow
Вокруг кода, для которого может быть создано исключение.
Rhys Owain Evans
Где бы я поместил их в этом коде? Кроме того, как мне посмотреть, что возвращается функцией findViewById()?
David Crow
- А куда я их помещу в этом коде?"
Видеть здесь.
"Кроме того, как мне посмотреть, что возвращается findViewById()?"
С помощью отладчика.