[英]Java JSONObject value cast to User
我不知道該如何將服務器發送到客戶端JSONObject 。 JSONObject有User,但是當Client獲得它時,我無法轉換為User。 我試過發送列表,但是JSONObject不允許我發送。
是否可以將User放入JSONObject中,並在Client讀取后將其強制轉換為User? 用戶和列表放到JSONObject中的是什么列表?
異常: Exception in thread "Thread-4" java.lang.ClassCastException: java.lang.String cannot be cast to application.User
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:
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:
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:
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());
}
在Server.java中:
List<User> list = new ArrayList<User>();
//...
//message.getJSONObject().put("list", list); //list has type List<User>
//..
在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.
也許您應該首先從Server.java中的ArrayList構造一個jsonArray,然后將其放入jsonObject Map中。
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.