java - 如何从 SoapObject 获取 byte[]

标签 java android web-services arrays ksoap2

我有一个 Web 服务,它返回对象 Home 的 ArrayList...这是我的类 Home:

import java.io.FileNotFoundException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;


public class Home implements Serializable {

    public void setPercorso(String percorso) {
        this.percorso = percorso;
    }

    public String getPercorso() {
        return percorso;
    }

    public void setNomignolo(String nomignolo) {
        this.nomignolo = nomignolo;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setUtente(String utente) {
        this.utente = utente;
    }

    public void setFamiglia(String famiglia) {
        this.famiglia = famiglia;
    }

    public void setFoto(byte[] foto) {
        this.foto = foto;
    }

    public String getNomignolo() {
        return nomignolo;
    }

    public String getNome() {
        return nome;
    }

    public String getUtente() {
        return utente;
    }

    public String getFamiglia() {
        return famiglia;
    }

    public byte[] getFoto() {
        return foto;
    }

    public Home(String nomignolo, String nome, String utente, String famiglia, byte[] foto, String percorso) {
        this.nomignolo = nomignolo;
        this.nome = nome;
        this.utente = utente;
        this.famiglia = famiglia;
        this.foto = foto;
        this.percorso = percorso;
    }

    public Home() {
    }

    private String nomignolo;
    private String nome;
    private String utente;
    private String famiglia;
    private byte[] foto;
    private String percorso;


    public ArrayList<Home> caricaH() throws SQLException, ClassNotFoundException, MyException, FileNotFoundException {
        ArrayList<Home> list = new ArrayList<Home>();
        list= HomeDAO.caricaHome(this);
        return list;
    }
}

在Android部分我以这种方式接收数据:

// other code bla bla bla...


public static ArrayList<Home> invokeHomeWS(String userName, String webMethName) {
    boolean homeStatus = false;
    ArrayList<Home> list = new ArrayList<Home>();
    SoapObject request = new SoapObject(NAMESPACE, webMethName);
    PropertyInfo unamePI = new PropertyInfo();
    // Set Username
    unamePI.setName("username");
    // Set Value
    unamePI.setValue(userName);
    // Set dataType
    unamePI.setType(String.class);
    // Add the property to request object
    request.addProperty(unamePI);
    // Create envelope
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
    // Set output SOAP object
    envelope.setOutputSoapObject(request);
    // Create HTTP call object
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        // Invoke web service
        androidHttpTransport.call(SOAP_ACTION + webMethName, envelope);
        // Get the response
        java.util.Vector<SoapObject> rs = (java.util.Vector<SoapObject>) envelope.getResponse();





        for(SoapObject cs : rs){

            Home item = new Home();

            item.setNomignolo(cs.getPropertyAsString("nomignolo"));
            item.setUtente(cs.getPropertyAsString("utente"));
            item.setNome(cs.getPropertyAsString("nome"));
            item.setPercorso(cs.getPropertyAsString("percorso"));
            item.setFoto((byte[])cs.getProperty("foto"));
            item.setFamiglia(cs.getPropertyAsString("famiglia"));


        list.add(item);
        }

    } catch (Exception e) {
        //Assign Error Status true in static variable 'errored'
        HomeActivity.errored = true;
        e.printStackTrace();
    }

    return list;
}

一切正常,除了

item.setFoto((byte[])cs.getProperty("foto"));...

它生成一个错误:

W/System.err﹕ java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to byte[].

所以我的问题是:我如何从 SoapObject 获取字节数组?

最佳答案

如果是返回String,可以将其转换为byte[],如下所示。试试这个。

byte[] b = string.getBytes();

关于java - 如何从 SoapObject 获取 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034477/

相关文章:

java - Intellij idea 13.1 如何检查正在运行的应用程序的VM选项

java - 使用时间戳的准备语句需要更多纳秒

java - jboss-序列化记录器级别不清楚

android - 如何指定R.java的包名与app包名不同

android - 使用波纹效果更改 FAB 颜色

java - 如何根据点击的item改变listview的内容?

c# - 多个 Web 服务共享相同的类

c# - 在 C# 中使用可选参数从 Web 引用调用 WebMethod

java - 为什么进度条没有进度?

java - Hibernate 在从相关实体中删除时加载 LOBS(不应该是懒惰的)?