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

Xamarin中用MySQL数据填充ListView时遇空引用异常求助

解决Xamarin中ListView填充数据时的NullReferenceException问题
  • 检查ExpenseReportCollection是否已实例化
    不管使用原生ObservableCollection还是MvvmHelpers的ObservableRangeCollection,必须在调用AddRange前完成实例化。在ViewModel构造函数中初始化集合:

    public OverviewExpenseReportViewModel()
    {
        ExpenseReportCollection = new ObservableRangeCollection<ExpenseReport>();
    }
    

    仅声明字段/属性但未实例化,会直接触发空引用异常。

  • 确认db对象是否正确初始化
    调用GetDataExpenseReport()前,必须确保DBConnection的实例db已完成初始化:

    // 直接实例化或通过依赖注入获取有效实例
    var db = new DBConnection();
    

    db为null时,调用其方法会立即抛出空引用异常。

  • 验证GetDataExpenseReport()的返回值
    该方法可能返回null,导致AddRange接收无效参数。修改方法确保返回空集合而非null:

    public List<ExpenseReport> GetDataExpenseReport()
    {
        var queryResult = // MySQL查询逻辑
        // 查询无结果时返回空集合,避免返回null
        return queryResult ?? new List<ExpenseReport>();
    }
    

    也可在调用前增加空值判断:

    var expenseData = db.GetDataExpenseReport();
    if (expenseData != null)
    {
        ExpenseReportCollection.AddRange(expenseData);
    }
    
  • 排查ExpenseReport模型实例是否存在空值
    如果GetDataExpenseReport()返回的集合中存在未初始化的ExpenseReport实例,后续绑定ListView时也可能引发异常。在数据映射阶段确保每个模型实例都被正确初始化:

    // 示例:从DataReader映射数据时实例化每个模型
    while (reader.Read())
    {
        var report = new ExpenseReport
        {
            Id = reader.GetInt32(0),
            Amount = reader.GetDecimal(1),
            // 其他属性赋值
        };
        queryResult.Add(report);
    }
    

内容的提问来源于stack exchange,提问作者Ivan Zöggeler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:31