簡體   English   中英

Java JSONObject值強制轉換為User

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM