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

标签 java android web-services nullpointerexception ksoap2

我有一个 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/

相关文章:

java - 导入无法解决错误

java - 如何知道为什么我的tomcat被内核杀死

android - 如何从手机中检索代理信息? android.net.Proxy.getPort 不工作

android - 如何在android上获取处理器编号

java - Spring-WS SecurityInterceptor操作级别

java - 是否只有 Apache Axis wsdl2Java 还是有其他库?

java - 在德国打发时间 - Android

java - 将 Java 功能与 Wikipedia 的多态性定义相关联

Android - 自定义 EditText 前缀颜色

java - SSL协议(protocol)可以保护Web Service吗?