如何从返回的XML-RPC对象中获取String数组?

问题描述 投票:0回答:2

我正在使用 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 中正确发送和接收数组?

java arrays apache xml-rpc
2个回答
2
投票

基于 http://ws.apache.org/xmlrpc/types.html,客户端 API 将始终返回

Object[]
,即使服务器返回
String[]

我建议循环结果并对每个成员调用

toString()
。丑陋,但工作。


0
投票

您已经创建了自己的函数来分析 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

...
© www.soinside.com 2019 - 2024. All rights reserved.