无法显示数据从火力地堡的ListView [英] Fail to display data as ListView from Firebase

查看:229
本文介绍了无法显示数据从火力地堡的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是只是检索火力地堡数据,然后输出它作为Android中的ListView(无需推什么回数据库)。我试着从 AndroidChat 例如学习和创造我自己的类和我自己的自定义列表适配器类而不是聊天的的.java和ChatListAdapter.java(如在还原最初例子)。我也改变了引用到我的火力地堡和我类似的数据结构到 HTTPS的:// Android的聊天。 firebaseio-demo.com/ 。下面是我的数据结构:(下一切都只是一样AndroidChat例子,只是不同的变量名)

我自己的类:

 包com.firebase.androidchat;
公共类菜单项{    私人字符串的食物;
    私人字符串工作日;    //为火力地堡对象映射所需的默认构造函数
    @燮pressWarnings(未使用)
    私人菜单项(){}    菜单项(字符串食品,字符串工作日){
        this.food =食物;
        this.weekDay =工作日;
    }    公共字符串getFood(){
        返回食物;
    }    公共字符串getWeekDay(){
        返回工作日;
    }
}

我自己的自定义列表适配器类:

 包com.firebase.androidchat;进口android.app.Activity;
进口android.view.View;
进口android.widget.TextView;
进口com.firebase.client.Query;公共类MenuListAdapter扩展FirebaseListAdapter<&菜单项GT; {    公共MenuListAdapter(查询文献,活动活动,INT布局){
        超(参考,MenuItem.class,布局,活动);
    }    @覆盖
    保护无效populateView(查看视图,菜单项项){
        //一个MenuItem对象映射到我们的列表视图中的条目
        字符串平日= item.getWeekDay();
        TextView的authorText =(TextView中)view.findViewById(R.id.author);
        authorText.setText(工作日+:);
        ((TextView的)view.findViewById(R.id.message))的setText(item.getFood());
    }
}

我在短暂的MainActivity:

 公共类MainActivity扩展ListActivity {    // TODO:将其更改为自己的火力地堡网址
    私有静态最后弦乐FIREBASE_URL =htt​​ps://barlaurea.firebaseio.com/;    私人火力地堡参考;
    私人ValueEventListener connectedListener;
    私人MenuListAdapter menuListAdapter;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        //设置我们的火力地堡裁判
        REF =新的火力地堡(FIREBASE_URL).child(菜单);
    }    @覆盖
    公共无效调用onStart(){
        super.onStart();
        //设置我们的观点和列表适配器。确保它滚动的底部为数据的变化
        最终的ListView ListView控件= getListView();
        //告诉我们的名单适配器,我们只希望一次50封邮件
        menuListAdapter =新MenuListAdapter(ref.limit(50),对此,R.layout.chat_message);
        listView.setAdapter(menu​​ListAdapter);        menuListAdapter.registerDataSetObserver(新DataSetObserver(){
            @覆盖
            公共无效调用onChanged(){
                super.onChanged();
                listView.setSelection(menu​​ListAdapter.getCount() - 1);
            }
        });

当我开始运行按钮,我的设备显示敬酒消息,连接到火力地堡,但仍保持屏幕空白,然后在几秒钟后坠毁,呈现出举杯不幸的是,火力地堡聊天已经停止。我错过了什么吗?谢谢!

编辑:这是我的LogCat中的观点:一切都变成红色的失败例外:主线
还我设备上的原有AndroidChat运行正常。

  02-07 16:17:35.105:D / dalvikvm(31766):GC_CONCURRENT释放313K,16%免费7795K / 9223K,暂停14ms的16ms的+,共为65μs
02-07 16:17:36.000:D / dalvikvm(31766):GC_CONCURRENT释放494K,17%免费7874K / 9479K,暂停2MS + 3ms的,总34ms
02-07 16:17:36.365:D / dalvikvm(31766):GC_CONCURRENT释放482K,17%免费7923K / 9543K,暂停19ms + 21ms,总142ms
02-07 16:17:36.495:D / AndroidRuntime(31766):关闭VM
02-07 16:17:36.495:W / dalvikvm(31766):主题ID = 1:螺纹未捕获的异常(组= 0x41fb02a0)退出
02-07 16:17:36.520:E / AndroidRuntime(31766):致命异常:主要
02-07 16:17:36.520:E / AndroidRuntime(31766):com.firebase.client.FirebaseException:未能反弹键入
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.firebase.androidchat.FirebaseListAdapter $ 1.onChildAdded(FirebaseListAdapter.java:63)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.firebase.client.core.ChildListenerContainer $ 1.run(ChildListenerContainer.java:52)
02-07 16:17:36.520:E / AndroidRuntime(31766):在android.os.Handler.handleCallback(Handler.java:615)
02-07 16:17:36.520:E / AndroidRuntime(31766):在android.os.Handler.dispatchMessage(Handler.java:92)
02-07 16:17:36.520:E / AndroidRuntime(31766):在android.os.Looper.loop(Looper.java:137)
02-07 16:17:36.520:E / AndroidRuntime(31766):在android.app.ActivityThread.main(ActivityThread.java:4947)
02-07 16:17:36.520:E / AndroidRuntime(31766):在java.lang.reflect.Method.invokeNative(本机方法)
02-07 16:17:36.520:E / AndroidRuntime(31766):在java.lang.reflect.Method.invoke(Method.java:511)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-07 16:17:36.520:E / AndroidRuntime(31766):在dalvik.system.NativeStart.main(本机方法)
02-07 16:17:36.520:E / AndroidRuntime(31766):com.shaded.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:产生的原因无法识别领域的工作日(类com.firebase.androidchat.MenuItem),不标记为可忽略(2称为属性:平日,食品])
02-07 16:17:36.520:E / AndroidRuntime(31766):在[来源:java.io.StringReader@42826fc8;行:1,列:13](通过参考链:com.firebase.androidchat.MenuItem [工作日])
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
02-07 16:17:36.520:E / AndroidRuntime(31766):在com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181)
02-07 16:17:36.520:E / AndroidRuntime(31766):... 11个


解决方案

答案已经在这里找到:

<一个href=\"http://stackoverflow.com/questions/21698441/firebases-androidchat-example-failed-to-bounce-to-type/21709202?noredirect=1#comment32837454_21709202\">Firebase's AndroidChat例如:未能反弹键入

在这种情况下,我应该已经输入平日在火力实例并不周日。

My goal is just to retrieve data from Firebase and then output it as ListView in Android (No need to push anything back to the database). I tried to learn from the AndroidChat example and created my own class and my own Custom List Adapter class instead of Chat.java and ChatListAdapter.java (as in the orignal example). I also changed the references to my Firebase and resemble my data structure to that of https://android-chat.firebaseio-demo.com/. Below is my data structure: (Everything below is just the same as the AndroidChat example, just different variable names)

My own class:

package com.firebase.androidchat;


public class MenuItem {

    private String food;
    private String weekDay;

    // Required default constructor for Firebase object mapping
    @SuppressWarnings("unused")
    private MenuItem() { }

    MenuItem(String food, String weekDay) {
        this.food = food;
        this.weekDay = weekDay;
    }

    public String getFood() {
        return food;
    }

    public String getWeekDay() {
        return weekDay;
    }
}

My own custom list adapter class:

package com.firebase.androidchat;

import android.app.Activity;
import android.view.View;
import android.widget.TextView;
import com.firebase.client.Query;

public class MenuListAdapter extends FirebaseListAdapter<MenuItem> {

    public MenuListAdapter(Query ref, Activity activity, int layout) {
        super(ref, MenuItem.class, layout, activity);
    }

    @Override
    protected void populateView(View view, MenuItem item) {
        // Map a MenuItem object to an entry in our listview
        String weekDay = item.getWeekDay();
        TextView authorText = (TextView)view.findViewById(R.id.author);
        authorText.setText(weekDay + ": ");
        ((TextView)view.findViewById(R.id.message)).setText(item.getFood());
    }
}

My MainActivity in brief:

public class MainActivity extends ListActivity {

    // TODO: change this to your own Firebase URL
    private static final String FIREBASE_URL = "https://barlaurea.firebaseio.com/";

    private Firebase ref;
    private ValueEventListener connectedListener;
    private MenuListAdapter menuListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
        // Setup our Firebase ref
        ref = new Firebase(FIREBASE_URL).child("menu");
    }

    @Override
    public void onStart() {
        super.onStart();
        // Setup our view and list adapter. Ensure it scrolls to the bottom as data changes
        final ListView listView = getListView();
        // Tell our list adapter that we only want 50 messages at a time
        menuListAdapter = new MenuListAdapter(ref.limit(50), this, R.layout.chat_message);
        listView.setAdapter(menuListAdapter);

        menuListAdapter.registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                super.onChanged();
                listView.setSelection(menuListAdapter.getCount() - 1);
            }
        });

When I started the Run button, my device displayed a toast message "Connected to Firebase" but the screen remained blank and then crashed after a few seconds, showing a toast "Unfortunately, Firebase Chat has stopped". What did I miss here? Thank you!

Edit: Here is my LogCat view: Everything turn red at the "FAIL EXCEPTION: main line" Also the original AndroidChat run fine on my device..

02-07 16:17:35.105: D/dalvikvm(31766): GC_CONCURRENT freed 313K, 16% free 7795K/9223K, paused 14ms+16ms, total 65ms
02-07 16:17:36.000: D/dalvikvm(31766): GC_CONCURRENT freed 494K, 17% free 7874K/9479K, paused 2ms+3ms, total 34ms
02-07 16:17:36.365: D/dalvikvm(31766): GC_CONCURRENT freed 482K, 17% free 7923K/9543K, paused 19ms+21ms, total 142ms
02-07 16:17:36.495: D/AndroidRuntime(31766): Shutting down VM
02-07 16:17:36.495: W/dalvikvm(31766): threadid=1: thread exiting with uncaught exception (group=0x41fb02a0)
02-07 16:17:36.520: E/AndroidRuntime(31766): FATAL EXCEPTION: main
02-07 16:17:36.520: E/AndroidRuntime(31766): com.firebase.client.FirebaseException: Failed to bounce to type
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.firebase.androidchat.FirebaseListAdapter$1.onChildAdded(FirebaseListAdapter.java:63)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.firebase.client.core.ChildListenerContainer$1.run(ChildListenerContainer.java:52)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at android.os.Handler.handleCallback(Handler.java:615)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at android.os.Looper.loop(Looper.java:137)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at android.app.ActivityThread.main(ActivityThread.java:4947)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at java.lang.reflect.Method.invokeNative(Native Method)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at java.lang.reflect.Method.invoke(Method.java:511)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at dalvik.system.NativeStart.main(Native Method)
02-07 16:17:36.520: E/AndroidRuntime(31766): Caused by: com.shaded.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "weekday" (class com.firebase.androidchat.MenuItem), not marked as ignorable (2 known properties: , "weekDay", "food"])
02-07 16:17:36.520: E/AndroidRuntime(31766):  at [Source: java.io.StringReader@42826fc8; line: 1, column: 13] (through reference chain: com.firebase.androidchat.MenuItem["weekday"])
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
02-07 16:17:36.520: E/AndroidRuntime(31766):    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181)
02-07 16:17:36.520: E/AndroidRuntime(31766):    ... 11 more

解决方案

The answer has been found here:

Firebase's AndroidChat example: Failed to bounce to type

In this case I should have typed weekDay not weekday in the firebase instance.

这篇关于无法显示数据从火力地堡的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆