gpt4 book ai didi

java - ksoap2 android web 服务 复杂类型 byte[]

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:16 25 4
gpt4 key购买 nike

我有一个 Web 服务,用于接收复杂类型 Pic 的对象,

图片.java

public class Pic implements KvmSerializable{

private double latitude;
private double longitude;
private long time;
private double accuracy;
private String name;
private byte[] imageInByte;

public byte[] getImageInByte() {
return imageInByte;
}
public void setImageInByte(byte[] imageInByte) {
this.imageInByte = imageInByte;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public double getAccuracy() {
return accuracy;
}
public void setAccuracy(double accuracy) {
this.accuracy = accuracy;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}

@Override
public Object getProperty(int arg0) {
switch(arg0){
case 0:
return latitude;
case 1:
return longitude;
case 2:
return time;
case 3:
return accuracy;
case 4:
return name;
case 5:
return imageInByte;
}
return null;
}
@Override
public int getPropertyCount() {
return 6;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch(arg0){
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "latitude";
break;
case 1:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "longitude";
break;
case 2:
arg2.type = PropertyInfo.LONG_CLASS;
arg2.name = "time";
break;
case 3:
arg2.type = Double.class;
arg2.name = "accuracy";
break;
case 4:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "name";
break;
case 5:
arg2.type = MarshalBase64.BYTE_ARRAY_CLASS;
arg2.name = "imageInBytes";
default:
break;
}
}
@Override
public void setProperty(int arg0, Object arg1) {
// TODO Auto-generated method stub
switch(arg0){
case 0:
latitude = Double.parseDouble(arg1.toString());
break;
case 1:
longitude = Double.parseDouble(arg1.toString());
break;
case 2:
time = Long.parseLong(arg1.toString());
break;
case 3:
accuracy = Double.parseDouble(arg1.toString());
break;
case 4:
name = arg1.toString();
break;
case 5:
imageInByte = Base64.decode(arg1.toString(), Base64.DEFAULT);
break;
default:
break;
}
}
}

我通过在信封 double 和 marshalBase64 中注册将其发送到 Web 服务。到目前为止,一切都运行顺利,尽管在 Web 服务中,一旦我获取对象,方法 picture.imageInByte() 返回 null。我不确定发生了什么,因为我可以像这样传递一个 byte[] 变量并将文件写入磁盘。但我只传递了一个 byte[],而不是一个内部有 byte[] 的复杂对象。

问题是什么?

最佳答案

我解决的方法是更改​​ Web 服务以接收 2 个参数,而不是一个。

像这样:

public void receivePicture(Pic picture, byte[] image){

}

其中图片是我需要的有关图像本身的信息,图像是实际的图像文件。

我知道这在某种程度上是一种黑客行为,并不完全是我正在寻找的良好解决方案,但它确实有效。

关于java - ksoap2 android web 服务 复杂类型 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583415/

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