[英]Java JSONObject value cast to User
I don't know that how can I do that Server send to client JSONObject . 我不知道该如何将服务器发送到客户端JSONObject 。 JSONObject has User but when Client get it then I can't cast to User. JSONObject有User,但是当Client获得它时,我无法转换为User。 I tried that I send list but the JSONObject doesn't let me. 我试过发送列表,但是JSONObject不允许我发送。
Is it possible that I put User into JSONObject and after Client read it and cast to User ? 是否可以将User放入JSONObject中,并在Client读取后将其强制转换为User? And what list has user and list put into JSONObject ? 用户和列表放到JSONObject中的是什么列表?
Exception: Exception in thread "Thread-4" java.lang.ClassCastException: java.lang.String cannot be cast to application.User
异常: Exception in thread "Thread-4" java.lang.ClassCastException: java.lang.String cannot be cast to application.User
Server.java : Server.java:
message = new SerializableJSONObject(new JSONObject());
message.getJSONObject().put("action", "friendsList");
List<User> list = new ArrayList<User>();
for (String s : userDatabase.getFriends(email)) {
User u = server.getUser(s);
if (u == null) {
u = userDatabase.getFriendData(s);
}else {
u = u.getUser(); // getUser doesn't have Socket
System.out.println(u.getEmail() +" -> "+u.getOutput() + ", "+u.getInput());
}
message.getJSONObject().put(email, u);
}
//message.getJSONObject().put("list", list);
message.writeObject(out);
Cleint.java : Cleint.java:
while(true) {
json.readJSONObject(in);
System.out.println("Receive: "+json.getJSONObject().get("action"));
switch (json.getJSONObject().getString("action")) {
case "login":
LoginController.receiveMessage(json.getJSONObject());
break;
case "friendsList":
List<User> list = new ArrayList<>();
//SerializableJSONArray mA = (SerializableJSONArray)json.getJSONObject().get("list");
//System.out.println(mA.getJSONArray().get(0));
Iterator<String> keys = json.getJSONObject().keys();
while(keys.hasNext()) {
String key = (String) keys.next();
System.out.println(json.getJSONObject().get(key));
list.add((User) json.getJSONObject().get(key));
}
MainController.addFrriendsList(list);
break;
default:
break;
}
}
SerializableJSONObject.java : SerializableJSONObject.java:
public class SerializableJSONObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = 11;
private transient JSONObject json;
public SerializableJSONObject(JSONObject json) {
this.json = json;
}
public JSONObject getJSONObject() {
return json;
}
public void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(json.toString());
}
public void readJSONObject(ObjectInputStream in) throws ClassNotFoundException, IOException, JSONException {
json = new JSONObject((String) in.readObject());
}
}
User.java : User.java:
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 11;
private String email;
private String name;
private Status status;
private ObjectOutputStream out;
private ObjectInputStream in;
public User(ObjectOutputStream out, ObjectInputStream in) {
super();
this.out = out;
this.in = in;
}
public User(String email, String name, Status status, ObjectOutputStream out, ObjectInputStream in) {
super();
this.email = email;
this.name = name;
this.status = status;
this.out = out;
this.in = in;
}
public User(String email, String name, Status status) {
super();
this.email = email;
this.name = name;
this.status = status;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public ObjectOutputStream getOutput() {
return out;
}
public ObjectInputStream getInput() {
return in;
}
public User getUser() {
return new User(getEmail(), getName(), getStatus());
}
In Server.java: 在Server.java中:
List<User> list = new ArrayList<User>();
//...
//message.getJSONObject().put("list", list); //list has type List<User>
//..
In Client.java 在Client.java中
//...
//SerializableJSONArray mA = (SerializableJSONArray)json.getJSONObject().get("list");
//here list is of type List<User> not SerializableJSONArray
//...
//List<User> is not convertable to SerializableJSONArray.
Maybe you should construct a jsonArray from your ArrayList in Server.java first and then put it in the jsonObject Map. 也许您应该首先从Server.java中的ArrayList构造一个jsonArray,然后将其放入jsonObject Map中。
I hope it helps. 希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.