2016-09-19 12 views
1

Firebaseデータベースに格納されている値を読み取ろうとしています。これは、データベースがどのように見えるかされていますFirebaseからデータを読み取っているときにUnrecognizedPropertyExceptionが発生しました

URL:今https://xxxx.firebaseio.com/Cohesion/Passes/Away/Arsenal

Firebase database

、Androidの側から、これは私がデータを取得しようとする方法である:

Firebase mRef = new Firebase("https://xxxx.firebaseio.com/Cohesion/Passes/Away/Arsenal"); 

    mRef.addValueEventListener(new ValueEventListener() 
    { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      Arsenal vals = dataSnapshot.getValue(Arsenal.class); 
      Log.e("retValue",""+vals); 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) 
     { 
      Log.e("REAL_ERROR",""+firebaseError); 

     } 
    }); 

アーセナル。クラス

public class Arsenal { 

    private int Cross; 
    private int LongBall; 
    private int ShortPass; 
    private int ThroughBall; 

    public Arsenal() 
    { 

    } 

    public Arsenal(int Cross,int LongBall,int ShortPass,int ThroughBall) 
    { 
     this.Cross = Cross; 
     this.LongBall = LongBall; 
     this.ShortPass = ShortPass; 
     this.ThroughBall = ThroughBall; 
    } 
    public int getCross() { 
     return Cross; 
    } 


    public int getLongBall() { 
     return LongBall; 
    } 


    public int getShortPass() { 
     return ShortPass; 
    } 


    public int getThroughBall() { 
     return ThroughBall; 
    } 


} 

私はtrueにコンソールのRulesを設定しましたので、それは一般に読み書きするためにアクセスできるので、認証を使わずにアクセスしています。ここ

はLogcatである:

9月19日12:14:51.032 13585から13585/com.ihrd.myapplication E/AndroidRuntime:致命的な例外:メイン プロセス:com.ihrd.myapplication、 PID:13585 テーマ:テーマ:{} com.firebase.client.FirebaseExceptionは: com.ihrd.myapplicationでcom.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)で を入力するバウンスに失敗しました。 .MainActivity $ 1.onDataChange(MainActivity.java:28)com.firebase.client.core.view.DataEvent.fireで でcom.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:53) (DataEvent.java:45) com.firebaseました。 client.core.view.EventRaiser $ 1.run(EventRaiser.java:38) (android.os.Handler.handleCallback(Handler.java:739) android.os.Handler.dispatchMessage(Handler.java:95) android.os.Looper.loop(Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(ネイティブメソッド) com.fasterxml:によって引き起こさcom.android.internal.os.ZygoteInit.mainで com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) (ZygoteInit.java:616)で .jackson.databind.exc.UnrecognizedPropertyException: が無視可能(既知のプロパティ0個)であると認識されない "Cross"(クラスcom.ihrd.myapplication.Arsenal)フィールド: [Source:[email protected] ;行:1、カラム:12] (参照チェーンを介し:com.ihrd.myapplication.Arsenal [ "クロス"]) com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)で で で com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160) でcom.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) コム.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer。ジャワ:315) でcom.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) でで com.ihrd.myapplication.MainActivity $ 1.onDataChangeでcom.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) で com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) (MainActivity.java:28) at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:53) at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) ( )com.firebase.client.core.view.EventRaiser $ 1.run(EventRaiser.java:38) at android。 os.Handler.handleCallback(Handler.java:739) (andler.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) android.appにあります。 ActivityThread.main java.lang.reflect.Method.invokeで(ActivityThread.java:5461) (ネイティブメソッド) でcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) でコマndroid.internal.os.ZygoteInit.main(ZygoteInit.java:616)

これはおそらく原因ですか?そして修正する方法は?親切に助けてください。

+0

チェックここ:

public class Arsenal { private int Cross; @JsonProperty("Cross") public int getCross() { return Cross; } } 

Firebase 3.xでは、対応する注釈はPropertyNameです:http://stackoverflow.com/questions/32108969/why-do-i-get-failed-to-bounce-to-type-when-i-turn-json-from-firebase-into-javaおそらく最も良い説明私はこれを見てきました。 – RamithDR

答えて

1

それはゲッターとセッターを持つクラスを見つけると、Firebaseは、基礎となるJSONのプロパティ名を決定するための命名規則JavaBeansを使用しています。

これは

public class Arsenal { 
    private int Cross; 

    public int getCross() { 
     return Cross; 
    } 
} 

は、このJSONに変換していることを意味します

cross: 19 

あなたはケースが異なっていることがわかります。私の知る限り見ることができるように、あなたはいくつかのオプションがあります。

1 - あなたは小文字とJOSNでプロパティ名を起動すると、物事はあなたと現在のコードを動作するJSONプロパティ

のケースを変更:

cross: 19 

2 - あなたが唯一の公共分野を持っている場合は、公共分野の​​代わりに、ゲッター/セッター

を使用し、Firebaseは、JSONのマッピングのためにそれらのフィールドの正確な名前を使用します。

public class Arsenal { 
    public int Cross; 
} 

3 - 最終的な解決策はFirebaseは、対応するJSONのプロパティを見つけやすくするために、クラスに注釈を入れることで正しいマッピング

を取得するには、クラスに注釈を付けます。

あなたはFirebase 2.xのSDKを使用しているので、注釈はジャクソンからJsonPropertyです:

public class Arsenal { 
    private int Cross; 

    @PropertyName("Cross") 
    public int getCross() { 
     return Cross; 
    } 
} 
-1

ジャクソンとクラスをシリアライズ可能にするために、セッターを追加するか、ゲッターを削除してメンバーを公開することをお勧めします。

0

LongBallの価値を得たい場合は、このようなコードを書いてください。

Firebase.setAndroidContext(this); 
Firebase myFirebaseRef= new Firebase("https://"https://xxxx.firebaseio.com/Cohesion/Passes/Away/Arsenal"/"); 

     myFirebaseRef.child("LongBall").addValueEventListener(new ValueEventListener() { 

      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       Log.e("TAG",snapshot.getValue().toString()); 
      } 

      @Override public void onCancelled(FirebaseError error) { } 

     }); 
関連する問題