构造函数创建对象后传入String为null问题排查求助
解决RecyclerView.Adapter接收Activity传递的String为null导致SQL绑定异常的问题
从你的Logcat和代码来看,问题的核心是传递给Adapter的字符串参数为null,导致SQLite执行查询时触发了the bind value at index 1 is null的错误。咱们一步步来排查和解决:
1. 先确认Intent传递的Key是否完全匹配
你在SandwichActivity里用intent.getStringExtra("TypeSandwich")获取值,但如果启动这个Activity的代码里,传递Extra时用的Key和这个不一致(比如大小写错误、拼写错误,或者根本没传这个Extra),getStringExtra就会返回null。
比如启动SandwichActivity的正确代码应该是这样的:
Intent intent = new Intent(YourCurrentActivity.this, SandwichActivity.class); intent.putExtra("TypeSandwich", "你要传递的食物类型字符串"); // Key必须和接收方的"TypeSandwich"完全一致 startActivity(intent);
请检查启动代码里的Key是否和接收方完全匹配,这是最常见的导致null的原因。
2. 在Activity中添加空值检查,避免传递null给Adapter
即使启动代码没问题,也建议在接收值后先做空值判断,防止null流入Adapter:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sandwich); Intent intent = getIntent(); String FOODTYPE = intent.getStringExtra("TypeSandwich"); // 新增空值检查 if (FOODTYPE == null) { Toast.makeText(this, "未获取到有效食物类型", Toast.LENGTH_SHORT).show(); finish(); // 空值时直接关闭当前页面,避免后续错误 return; } FoodAdapter foodAdapterSandwich = new FoodAdapter(FOODTYPE); RecyclerView foodRecyclerView = findViewById(R.id.sandwich_recycler_view); foodRecyclerView.setLayoutManager(new LinearLayoutManager(this)); foodRecyclerView.setAdapter(foodAdapterSandwich); }
3. 给Adapter添加空值防护,增强鲁棒性
为了避免后续类似问题,在Adapter的构造方法里也加入空值处理,不要直接用null执行SQL查询:
public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.FoodViewHolder> { private List<Food> foodDataList; // 记得先声明这个变量 public FoodAdapter(String s) { if (s != null) { foodDataList = Food.findWithQuery(Food.class, "Select * from Food where type = ?", s); } else { // 空值时返回空列表,避免后续getItemCount()报错 foodDataList = new ArrayList<>(); } } // 其他方法保持不变... }
为什么会出现这个问题?
你提到“Activity中传递的String不为null”,但实际上getStringExtra在没有匹配的Key或者未传递该Extra时,会默认返回null。大概率是启动SandwichActivity时没有正确传递TypeSandwich这个Extra,或者Key拼写错误导致获取不到值,最终传递了null给Adapter,触发SQLite的绑定值异常。
内容的提问来源于stack exchange,提问作者Konstantin
相关产品推荐
相关产品推荐

