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

Xamarin Android加载Firebase数据触发FirebaseException问题求助

Firebase数据库加载数据异常排查方案

问题背景

在Xamarin Android应用中从Firebase数据库加载全量数据时,持续抛出Firebase.Database.FirebaseException,但使用LimitToLast(10)配合OrderByKey()时可正常运行,怀疑是反序列化问题。数据由SQLite通过DB Browser导出JSON(或转CSV再转JSON)后上传至Firebase控制台。

调用栈信息

0xC in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:157,13  C#
0x6 in System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__7_0 at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021,49  C#
0xC in Android.App.SyncContext. at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:36,19 C#
0xE in Java.Lang.Thread.RunnableImplementor.Run at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36,6 C#
0x8 in Java.Lang.IRunnableInvoker.n_Run at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Java.Lang.IRunnable.cs:84,4 C#
0x8 in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PP_V at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:22,5  C#

数据加载代码

public async Task<List<Elementi>> SelectAll()
{
    return (await firebase
      .Child("Test")
      .OnceAsync<ElementiDiRete>()).Select(elemento => new Elementi
      {
          Posizione = elemento.Object.Posizione,
          Comune = elemento.Object.Comune,
          Nome = elemento.Object.Nome,
          TipoElemento = elemento.Object.TipoElemento,
          idElemento = elemento.Object.idElemento,
          Area = elemento.Object.Area,
          Appartenenza = elemento.Object.Appartenenza,
          Coordinate = elemento.Object.Coordinate
    }).ToList();
}

Elementi实体类

public class Elementi
{ 
    public int idElemento { get; set; }
    public string TipoElemento { get; set; }
    public string Nome { get; set; }
    public string Comune { get; set; }
    public string POP { get; set; }
    public string Posizione { get; set; }
    public string Area { get; set; }
    public int Coordinate { get; set; }
    public string Appartenenza { get; set; }
}

排查与解决步骤

1. 补全ElementiDiRete类的检查

代码中使用OnceAsync<ElementiDiRete>进行反序列化,但未提供该类的定义。需确认:

  • 该类的属性名称、数据类型与Firebase中Test节点下的字段完全匹配(Firebase大小写敏感)
  • 若Firebase存在ElementiDiRete未定义的字段,需添加[JsonIgnore]标记忽略,或补全对应属性
  • 检查属性是否为可空类型:若Firebase中存在null值,对应属性需设为可空(如int? Coordinate)

2. 检查Firebase数据中的异常值

全量加载报错但加载最后10条正常,大概率是部分数据存在反序列化无法处理的值:

  • 核对Coordinate字段:Firebase中是否存在字符串、小数或null值(代码中定义为int,无法转换非整数类型)
  • 检查其他字段:如idElemento是否有非整数内容,字符串字段是否存在格式错误(如未闭合的引号)
  • 可在Firebase控制台筛选数据,逐一排查超出前10条的记录是否有异常

3. 修复JSON导出/转换的格式问题

从SQLite导出JSON时可能存在格式缺陷:

  • 检查导出的JSON是否有语法错误(如多余逗号、缺失引号),可通过本地JSON校验工具验证
  • 确保JSON字段名与实体类属性完全一致(包括大小写),SQLite导出可能自动转换字段名大小写
  • 避免CSV转JSON时出现的格式丢失(如数值型字段被转为字符串)

4. 添加异常捕获获取详细错误信息

修改SelectAll方法,捕获并输出具体错误,定位反序列化失败的具体原因:

public async Task<List<Elementi>> SelectAll()
{
    try
    {
        var data = await firebase.Child("Test").OnceAsync<ElementiDiRete>();
        return data.Select(elemento => new Elementi
        {
            Posizione = elemento.Object.Posizione,
            Comune = elemento.Object.Comune,
            Nome = elemento.Object.Nome,
            TipoElemento = elemento.Object.TipoElemento,
            idElemento = elemento.Object.idElemento,
            Area = elemento.Object.Area,
            Appartenenza = elemento.Object.Appartenenza,
            Coordinate = elemento.Object.Coordinate
        }).ToList();
    }
    catch (FirebaseException ex)
    {
        // 输出详细错误信息到日志或控制台
        System.Diagnostics.Debug.WriteLine($"Firebase错误: {ex.Message}");
        System.Diagnostics.Debug.WriteLine($"内部错误: {ex.InnerException?.Message}");
        throw;
    }
}

内容的提问来源于stack exchange,提问作者Exception

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:18:22