2015-09-29 5 views
5

HashMap<String, Object> (उदा। HashMap<String, User>) के अलावा फायरबेस 2.4 ref.updateChildren() का उपयोग करते समय IllegalStateException प्राप्त करने के दौरान।एंड्रॉइड फायरबेस 2.4 अवैध refateException नई ref.updateChildren()

> 09-29 18:03:21.680: E/AndroidRuntime(6863): FATAL EXCEPTION: main 
> 09-29 18:03:21.680: E/AndroidRuntime(6863): Process: 
> com.xxx.xxx.xxx, PID: 6863 09-29 
> 18:03:21.680: E/AndroidRuntime(6863): java.lang.IllegalStateException: 
> Could not execute method of the activity 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> android.view.View$1.onClick(View.java:4035) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> android.view.View.performClick(View.java:4881) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> android.view.View$PerformClick.run(View.java:19592) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> android.os.Handler.handleCallback(Handler.java:733) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> android.os.Handler.dispatchMessage(Handler.java:95) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> android.os.Looper.loop(Looper.java:146) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> android.app.ActivityThread.main(ActivityThread.java:5756) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> java.lang.reflect.Method.invokeNative(Native Method) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> java.lang.reflect.Method.invoke(Method.java:515) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
> 09-29 18:03:21.680: E/AndroidRuntime(6863): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> dalvik.system.NativeStart.main(Native Method) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): Caused by: 
> java.lang.reflect.InvocationTargetException 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> java.lang.reflect.Method.invokeNative(Native Method) 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> java.lang.reflect.Method.invoke(Method.java:515) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): at 
> android.view.View$1.onClick(View.java:4030) 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): ... 11 more 09-29 18:03:21.680: 
> E/AndroidRuntime(6863): Caused by: 
> com.firebase.client.FirebaseException: Failed to parse node with class 
> class com.xxx.xxx.xxx.User 09-29 
> 18:03:21.680: E/AndroidRuntime(6863):  at 
> com.firebase.client.snapshot.NodeUtilities.NodeFromJSON(NodeUtilities.java:84) 
> 09-29 18:03:21.680: E/AndroidRuntime(6863): at 
> com.firebase.client.snapshot.NodeUtilities.NodeFromJSON(NodeUtilities.java:12) 
> 09-29 18:03:21.680: E/AndroidRuntime(6863): at 
> com.firebase.client.utilities.Validation.parseAndValidateUpdate(Validation.java:127) 
> 09-29 18:03:21.680: E/AndroidRuntime(6863): at 
> com.firebase.client.Firebase.updateChildren(Firebase.java:438) 

संपादित:

वहाँ ref.updateChildren() करने के लिए कस्टम HashMap HashMap<String, User> तरह पारित करने के लिए एक तरीका है?

उत्तर

7

अपने आखिरी सवाल पर:

वहाँ एक रास्ता ref.updateChildren करने के लिए कस्टम HashMap पारित करने के लिए HashMap की तरह (है)?

एंड्रॉयड/जावा के लिए Firebase एसडीके सीधे updateChildren() में POJOs (अपने User वर्ग) की तरह गुजर समर्थन नहीं करता।

लेकिन आप क्या कर सकते में POJO कन्वर्ट है एक Map साथ:

updates.put("users/"+uid, userMap); 
updates.put("lists/"+uid+"/mine, "value"); 

ref.updateChildren(updates); 
+0

:

Map<String, Object> userMap = new ObjectMapper().convertValue(user, Map.class); 

तो फिर तुम मान updateChildren() में गुजर रहे हैं में मूल्यों का नक्शा डाल सकते हैं बहुत बहुत धन्यवाद, फ्रैंक! यह दृष्टिकोण फ़ील्ड द्वारा उपयोगकर्ता को मानचित्र फ़ील्ड में कनवर्ट करने से कहीं अधिक संक्षिप्त है। –

5

Official Firebase Blog से कोड स्निपेट इस मुद्दे एक इस तरह फिर से लिखें कस्टम संरचना करने के लिए है से बचने के लिए के रूप में:

Map<String, String> newPost = new HashMap<String, String>(); 
newPost.put("title", "New Post"); 
newPost.put("content", "Here is my new post!"); 

और फिर यह कस्टम डेटा मॉडल के बजाय डाल:

Map<String, Object> updatedUserData = new HashMap<String, Object>(); 
updatedUserData.put("users/posts/" + newPostKey, true); 
updatedUserData.put("posts/" + newPostKey, newPost); 

newPost के बजाय कस्टम डेटा मॉडल का उपयोग IllegalStateException का कारण बनता है।

संबंधित मुद्दे