检索子值 Failed-Firebase- Android

Posted

技术标签:

【中文标题】检索子值 Failed-Firebase- Android【英文标题】:Retrive Child values Failed-Firebase- Android 【发布时间】:2020-06-24 07:55:19 【问题描述】:

我正在尝试使用 Datasnapshot 添加每个列表的成本,然后将其发送到 firebase,然后再次使用发送的数据到另一个活动中,但我的应用打开然后崩溃并抛出以下错误。

    2020-03-12 14:43:13.887 17284-17284/? E/androidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.zfr, PID: 17284
    com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertString(com.google.firebase:firebase-database@@19.2.1:425)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.2.1:216)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.2.1:79)
        at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.2.1:203)
        at com.example.android.zfr.NavActivity$2.onDataChange(NavActivity.java:71)
        at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.1:179)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
        at android.os.Handler.handleCallback(Handler.java:794)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6651)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

这是我使用数据的活动代码

nDb=database.getReference().child("Navigation Activity").child("Cost");
    nDb.addListenerForSingleValueEvent(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            String cost=dataSnapshot.getValue(String.class);
            Log.d(TAG, "Value is: " + cost);
            nav_total_cost.setText(cost);
        

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 

        
    );

请不要因为我的错误而评判我。

【问题讨论】:

【参考方案1】:

以这种方式更改您的代码

nDb=database.getReference().child("Navigation Activity").child("Cost");
nDb.addListenerForSingleValueEvent(new ValueEventListener() 
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
        Long cost=dataSnapshot.getValue(Long.class);
        Log.d(TAG, "Value is: " + cost);
        nav_total_cost.setText(cost.toString());
    

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) 

    
);

您正在转换错误的值,您的结果是 Long 并且您正在转换为 String

【讨论】:

它有效,但我在不同的活动中遇到了另一个问题 有什么办法可以随叫随到吗?先生,很难解释一切

以上是关于检索子值 Failed-Firebase- Android的主要内容,如果未能解决你的问题,请参考以下文章

使用 DOM 解析器根据父节点属性检索子节点值

MongodB 通过属性名称检索子文档

如何在firebase中检索子(自动增量)名称

NSFetchedResultsController, NSPredicate 以对多关系检索子对象

使用自动布局检索子视图的正确位置

用于检索子进程输出的python代码(linux ps命令)