Stewiesh Stewiesh - 3 months ago 38
Android Question

Firebase , classmaper : no setter/field found for 'UserTwo' on class 'myclass'

So firebase keeps giving me nullpointer exception , and also that it can't find any setter/field on class 'ChatModel' , here is my chatModel class :

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;
}
}


p.s i tried making field private and everything but didn't work , here is how i create chatmodel in database :

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);
}


and finally how i am trieng to get these data :

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();
}
});
}


example data , saved in firebasedatabase , picture : Saved data image example

and lastly error i am getting 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.NullPointerException
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)

Answer

The POJO class does not have the same structure with the database.

Change your ChatModel class fields to

public class ChatModel {
    public Map<String,Object> Messages = new HashMap<>();
    public String UserOne;
    public String UserTwo;

    // constructor
    // setter and getter
}