所以firebase一直给我null指针异常,并且它在类’ChatModel’上找不到任何设置器/字段,这是我的chatModel类:
package edusolution.matrimony; import java.util.HashMap; import java.util.Map; /** * Created by el on 8/26/16. */ public class ChatModel { public Map<String,Object> message = new HashMap<>(); public String foruser; public String foruserAnother; public ChatModel() { } public ChatModel(String foruser,String foruserAnother) { this.foruser = foruser; this.foruserAnother = foruserAnother; } public String getForuser() { return foruser; } public void setForuser(String foruser) { this.foruser = foruser; } public String getForuserAnother() { return foruserAnother; } public void setForuserAnother(String foruserAnother) { this.foruserAnother = foruserAnother; } public Map<String, Object> getMessage() { return message; } public void setMessage(Map<String,Object> message) { this.message = message; } public Map<String,Object> toMap() { HashMap<String,Object> result = new HashMap<>(); message.put("somebody","iusedtoknow"); result.put("UserOne",foruser); result.put("UserTwo",foruserAnother); result.put("Messages",message); return result; } }
附言:我试图使字段私有和一切,但没有用,这是我如何在数据库中创建chatmodel:
private void createChatModel (String Name,String currentUserName) { DatabaseReference database = FirebaseDatabase.getInstance().getReference(); String Key = FirebaseDatabase.getInstance().getReference().child("chatRooms").push().getKey(); ChatModel chat = new ChatModel(Name,currentUserName); Map<String,Object> postValues = chat.toMap(); Map<String,Object> childUpdates = new HashMap<>(); childUpdates.put("/chatRooms/"+Key,postValues); database.updateChildren(childUpdates); }
最后是我如何获取这些数据:
public void setupChat(final String username) { //check if chat room is already exists or not databaseReference.child("chatRooms").addValueEventListener(new ValueEventListener() { public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot s : dataSnapshot.getChildren()) { ChatModel chat = s.getValue(ChatModel.class); if(chat != null ) { Log.d("Key and hash : ",s.getKey()+" "+chat.getMessage().get(0)); if (chat.getForuser().equals(auth.getCurrentUser().getUid()) && chat.getForuserAnother().equals(username)) { Log.d("Chat is ", s.getKey()); RoomName = new String(s.getKey()); ChatEnabled = true; } else if (chat.getForuser().equals(username) && chat.getForuserAnother().equals(auth.getCurrentUser().getUid())) { Log.d("chat is also ", s.getKey()); RoomName = new String(s.getKey()); ChatEnabled = true; } else { Log.d("No chat : ", "creating chat"); } } } } public void onCancelled(DatabaseError databaseError) { Toast.makeText(getApplicationContext(),"Unable to retrieve data",Toast.LENGTH_LONG).show(); } }); }
示例数据,保存在firebasedatabase中,图片:保存的数据图片示例
最后的错误,我得到eveytime:
08-28 18:28:51.005 31762-31762/edusolution.matrimony W/ClassMapper: No setter/field for UserTwo found on class edusolution.matrimony.ChatModel 08-28 18:28:51.005 31762-31762/edusolution.matrimony W/ClassMapper: No setter/field for Messages found on class edusolution.matrimony.ChatModel 08-28 18:28:51.005 31762-31762/edusolution.matrimony W/ClassMapper: No setter/field for UserOne found on class edusolution.matrimony.ChatModel 08-28 18:28:51.005 31762-31762/edusolution.matrimony D/Key and hash :: -KQGYLHb2IQ34AHkzx5G null 08-28 18:28:51.005 31762-31762/edusolution.matrimony D/AndroidRuntime: Shutting down VM 08-28 18:28:51.005 31762-31762/edusolution.matrimony W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41919700) 08-28 18:28:51.012 31762-31762/edusolution.matrimony E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerExceptio at edusolution.matrimony.Chat$1.onDataChange(Chat.java:70) at com.google.android.gms.internal.zzaie.zza(Unknown Source) at com.google.android.gms.internal.zzaje.zzcta(Unknown Source) at com.google.android.gms.internal.zzajh$1.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)
POJO类与数据库的结构不同。
将您的ChatModel班级字段更改为
ChatModel
public class ChatModel { public Map<String,Object> Messages = new HashMap<>(); public String UserOne; public String UserTwo; // constructor // setter and getter }