Как получить байт [] из SoapObject

У меня есть веб-сервис, который возвращает ArrayList объекта Home... это мой класс 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 не может быть приведен к байту [].

Итак, мой вопрос: как я могу получить массив байтов из SoapObject?

2 ответа

Если это возвращаемая строка, вы можете преобразовать ее в byte[], как показано ниже. попробуй это.

byte[] b = string.getBytes();

Просто попробуйте это

byte[] bitmapdata = blob.toByteArray();

и если растровые данные являются байтовым массивом, то получение растрового изображения происходит следующим образом

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata .length);

Надеюсь, это поможет.

Другие вопросы по тегам