请教关于ksoap2接收byte[]的问题

懒得抠虱子 2008-12-19 09:36:18
我在网上阅读了 郑昀 大哥关于ksoap2的文章(http://blog.csdn.net/zhengyun_ustc/archive/2007/01/17/1485436.aspx)后,编写了如下代码,想接收一个byte[]数据,但是程序运行时总提示ClassCastException,请问我应该怎样做才能正确的接收到这个byte[]数据呢?服务器是以二进制流的形式发送的。
    public byte[] downloadFile(String strUrl, String strFileID)
throws IOException, XmlPullParserException {
byte[] bResponse = null;
HttpTransport ht = null;

try {
System.out.println("----------start---------");
String serviceNamespace = strUrl;
String methodName = "downloadFile";
String serviceURL = strUrl;

SoapObject request = new SoapObject(serviceNamespace, methodName);

request.addProperty("FileID", strFileID);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = request;
(new MarshalBase64()).register(envelope);

ht = new HttpTransport(serviceURL);

ht.debug = true;
ht.call(null, envelope);

bResponse = (byte[])envelope.getResponse(); //这里总是报ClassCastException
} finally {
if (ht != null) {
System.out.println("request dump>>" + ht.requestDump);
System.out.println("response dump>>" + ht.responseDump);
}
}

return bResponse;
}
...全文
357 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得抠虱子 2008-12-19
  • 打赏
  • 举报
回复
to: yanhan0615
打印出来是这个:
envelope.getResponse().getClass():class org.ksoap2.serialization.SoapPrimitive
yanhan0615 2008-12-19
  • 打赏
  • 举报
回复
晕倒了,lz啊,不是让你打他的toString(),你打一下envelope.getResponse().getClass()
懒得抠虱子 2008-12-19
  • 打赏
  • 举报
回复
to: yanhan0615
我把envelope.getResponse().toString();打印出来是这样的东西:
Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAg....(后面还有很长csdn不让写太长...)


to: kf156 这两种写法都试过了,一样的错误
//原文代码如下:
Object Response = envelope.getResult();
byte[] by = (byte[])Response;

//你的代码
bResponse = (byte[])envelope.getResponse();
kf156 2008-12-19
  • 打赏
  • 举报
回复
按你给你地址,查看了下

//原文代码如下:
Object Response = envelope.getResult();
byte[] by = (byte[])Response;

//你的代码
bResponse = (byte[])envelope.getResponse();


是不是你调的方法错了...


yanhan0615 2008-12-19
  • 打赏
  • 举报
回复
查了一下api,返回一个object,那也不好判断了,lz吧envelope.getResponse()来system.out一下看看是什么东西在里面
懒得抠虱子 2008-12-19
  • 打赏
  • 举报
回复
请问j2me中应该怎么讲Object转为byte[]呢?j2me中没有ObjectInputStream
kf156 2008-12-19
  • 打赏
  • 举报
回复
ClassCastException异常表示类型转换错误
envelope.getResponse();
这返回的是什么类型的,应该不是byte[]型的,仔细检查下
懒得抠虱子 2008-12-19
  • 打赏
  • 举报
回复
刚有人告诉我Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAg...是base64编码过的,需要解码,就看到你的回复了。
非常感谢 socool627 问题解决了,呵呵,同样感谢楼上各位的帮忙,谢谢大家~呵呵
socool627 2008-12-19
  • 打赏
  • 举报
回复
贴一段我以前测试通过的代码。。。
//发送byte[],ws返回byte[]
SoapObject client = new SoapObject(serviceNamespace,methodName);
String data = new String(Hex.encode(dataPack));
client.addProperty("byte",new SoapPrimitive(SoapEnvelope.ENC, "base64",data));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = client;
HttpTransport ht = new HttpTransport(serviceURL);
ht.call("", envelope);
Object ret = (Object)envelope.getResult();
String retString = String.valueOf(ret);
byte[] retByte[] = Base64.decode(retString);
socool627 2008-12-19
  • 打赏
  • 举报
回复
Object Response = envelope.getResult();
byte[] bResponse = org.kobjects.base64.Base64.decode(String.valueOf(Response));

这样也许可以。。我取byte[]的时候这样的。。顺利通过

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧