2016-07-01 15 views
0

我在嘗試從Firebase檢索時遇到了一些問題。這裏是我的Firebase中的「用戶」表:Firebase在檢索時未能反彈鍵入

我試圖存儲像一個多字段的用戶。我存儲錯了嗎? enter image description here

我Users.java:

public class Users { 
public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String getPhone() { 
    return phone; 
} 

public void setPhone(String phone) { 
    this.phone = phone; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getQuestion() { 
    return question; 
} 

public void setQuestion(String question) { 
    this.question = question; 
} 

public String getAnswer() { 
    return answer; 
} 

public void setAnswer(String answer) { 
    this.answer = answer; 
} 

private String userName; 
private String password; 
private String address; 
private String phone; 
private String email; 
private String question; 
private String answer; 

} 

,當我嘗試從火力地堡檢索JSON的部分:

btnSignin.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Creating firebase object 
      Firebase ref = new Firebase(Config.FIREBASE_URL); 
      //Value event listener for realtime data update 
      ref.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
         //Getting the data from snapshot 
         Users user = postSnapshot.getValue(Users.class); 
         System.out.println(user.getUserName()); //Testing 

        } 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 
        System.out.println("The read failed: " + firebaseError.getMessage()); 
       } 
      }); 
     } 
    }); 

但是,我得到這些錯誤消息:

07-01 11:32:50.735 1025-1025/com.apps E/AndroidRuntime: FATAL EXCEPTION: main 
com.firebase.client.FirebaseException: Failed to bounce to type 
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185) 
    at com.gabrielheng.zhapalangapps.Login$1$1.onDataChange(Login.java:49) 
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4512) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "gab" (class Entity.Users), not marked as ignorable (7 known properties: , "address", "question", "userName", "password", "email", "answer", "phone"]) 
    at [Source: [email protected]; line: 1, column: 9] (through reference chain: Entity.Users["gab"]) 
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) 
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
    at com.gabrielheng.zhapalangapps.Login$1$1.onDataChange(Login.java:49)  
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)  
    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)  
    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)  
    at android.os.Handler.handleCallback(Handler.java:605)  
    at android.os.Handler.dispatchMessage(Handler.java:92)  
    at android.os.Looper.loop(Looper.java:137)  
    at android.app.ActivityThread.main(ActivityThread.java:4512)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:511)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)  
    at dalvik.system.NativeStart.main(Native Method)  
07-01 11:32:50.790 1025-1026/com.apps D/dalvikvm: GC_CONCURRENT freed 456K, 13% free 9663K/11015K, paused 21ms+7ms 

有沒有想法?提前致謝。

回答

2

該錯誤是明確提及在堆棧跟蹤:

所致:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:無法識別的字段 「GAB」(類Entity.Users),不標記爲可忽略(7個已知特性:, 「地址」, 「問題」, 「username」 的 「密碼」, 「電子郵件」, 「答案」, 「電話」])

由於您的JSON不有一個名爲gab的屬性,看起來你只是在JSON樹中讀取錯誤級別的數據。

的解決方案是附着在樹中的聽衆低一個級別的Users節點上:

Firebase ref = new Firebase(Config.FIREBASE_URL); 
//Value event listener for realtime data update 
ref.child("Users").addValueEventListener(new ValueEventListener() { 
    ... 
+0

我明白了。對不起這是我的錯。我忘記了我添加了一個子級來整理它,以便我的數據更清晰。感謝您指出錯誤! – hyperfkcb

+0

不客氣。快樂黑客! –

2

Users類需要一個無參數constuctor:

public Users() { 
} 

這在the documentation解釋。

不是處理原始類型,我們會在保存用戶時做 。我們將創建一個代表博客的Java類。與上次一樣,我們必須確保我們的字段名稱與 的Firebase數據庫中的屬性名稱匹配,並且使 類爲默認的無參數構造函數

+0

如果類沒有定義構造函數,編譯器將生成一個默認的無參數的構造函數,它的火力地堡碼會發現使用反射。雖然我通常不會依賴這種編譯器行爲,但缺少顯式的無參數構造函數不應該引起此處的問題。 –

+0

@Frank:Ooops。我的錯。我沒有使用過舊版本的Firebase,並依賴於這些文檔。 ;-) –

+0

@qbix嘿,但這並不能解決問題。你有什麼想法? – hyperfkcb