我正在使用 Apache java XML-RPC 最新版本。
Server 中发送数组的代码如下:
LinkedList<String> messages = new LinkedList<String>();
public String[] getMessages() {
System.out.println("Sent messages");
return messages.toArray(new String[messages.size()]);
}
为了在客户端接收,我尝试过这样的事情:
String[] result = (String[]) client.execute("Message.getMessages", new Object[] {});
这应该将我收到的对象转换为正确的类型(String [])。不幸的是它没有,我收到以下错误:[Ljava.lang.Object;无法转换为 [Ljava.lang.String;
所以我想知道是否有人知道如何在 java XML-RPC 中正确发送和接收数组?
基于 http://ws.apache.org/xmlrpc/types.html,客户端 API 将始终返回
Object[]
,即使服务器返回 String[]
我建议循环结果并对每个成员调用
toString()
。丑陋,但工作。
您已经创建了自己的函数来分析 xmlrpc 响应,该响应通常是一个 Object[],我正在使用这个:
private void XmlRpcResponseAnalyser(List<Object> s) {
StringBuilder sb = new StringBuilder();
sb.append("\n\nString Builder:\n");
int c = 1;
for (Object o : s) {
try {
Map<String, Object> map = (Map<String, Object>) o;
sb.append("\n\n").append(c++);
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
if (value.contains("java.lang.Object")) {
try {
Object[] arr = (Object[]) entry.getValue();
sb.append("\n").append(key).append(" = ").append(arr[1]);
} catch (Exception e) {
sb.append("null");
}
}else {
sb.append("\n").append(key).append(" = ").append(value);
}
}
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
tvDebug.append(sb.toString());
}
tvDebug(TextView)将显示如下:
1
key1=value1
key2=value2
2
key1=value1
key2=value2
...