gpt4 book ai didi

java - Android Socket 将对象转换为ArrayList

转载 作者:行者123 更新时间:2023-12-02 07:21:12 24 4
gpt4 key购买 nike

我有一个从 Android 到 Java 应用程序的客户端服务器连接。我正在做的是用 writeObject 编写一个 ArrayList,这样我就可以在执行 readObject 之后将其转换回 ArrayList,但我得到了这个异常:

01-07 11:10:08.821: E/AndroidRuntime(1314): Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
01-07 11:10:08.821: E/AndroidRuntime(1314): at com.williamhenry.audiobolle.ConnectionToServer.getUsers(ConnectionToServer.java:127)

Android 应用程序告诉服务器使用命令 GETUSERS 获取用户

这是在MainActivity.java

adapter=new ListAdapter(this, new ConnectionToServer().execute("GETUSERS").get());

这是在 ConnectionToServer.java 部分抛出异常的地方(转换的行):

private ArrayList<HashMap<String, String>> getUsers()
{
ArrayList<HashMap<String, String>> usersList = new ArrayList<HashMap<String, String>>();

try {
Socket socket = new Socket(url, 8001);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject("GETUSERS");

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

usersList = (ArrayList<HashMap<String, String>>) ois.readObject();

ois.close();
oos.close();


} catch (UnknownHostException e) {} catch (IOException e) {} catch (ClassNotFoundException e) {}
return usersList;
}

这就是服务器将其发送到 Android 应用程序(客户端)的方式:

else if(messageArray[0].equals("GETUSERS"))
{
try {
//st.setUserFullName(messageArray[1], messageArray[2], messageArray[3]);
oos.writeObject(st.getUsers());
} catch (SQLException e) {oos.writeObject("[ERROR]");}
}

这是调用的方法:

public ArrayList<HashMap<String, String>> getUsers() throws SQLException
{
ArrayList<HashMap<String, String>> usersList = new ArrayList<HashMap<String, String>>();
Statement statement = conn.createStatement();
try {

String query = "SELECT userID,username,status,fullname,lastonline FROM users";
ResultSet resultSet = statement.executeQuery(query);
try {
while (resultSet.next()) {
HashMap<String, String> map = new HashMap<String, String>();

// In Hashmap das Key und den Wert reinschreiben
map.put(KEY_ID, resultSet.getString("userID"));
map.put(KEY_USERNAME, resultSet.getString("username"));
map.put(KEY_STATUS, resultSet.getString("status"));
map.put(KEY_LASTONLINE, resultSet.getString("lastonline"));
map.put(KEY_THUMB_URL, resultSet.getString("thumb_url"));

// Hashlist in die ArrayList einfügen
usersList.add(map);
}
} finally {
resultSet.close();
}
} finally {
statement.close();
}
return usersList;
}

感谢您的帮助,我真的很感激:)

最佳答案

查询中缺少字段 thumb_url。因此 resultSet.getString("thumb_url")) 失败,服务器发送字符串 "[ERROR]",客户端无法将其反序列化为 List。

你可能可以这样做:

Object result = ois.readObject();
if ("[ERROR]".equals(result)) {
// something was wrong server side
throw SomeException();
} else {
usersList = (ArrayList<HashMap<String, String>>) result;
}

但我认为在服务器端捕获异常会更好

关于java - Android Socket 将对象转换为ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14194930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com