You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造函数创建对象后传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:29