2015-10-09 1 views
1

У меня есть веб-сервис, который возвращает ArrayList объектного Home ... это мой класс дома:Как получить Byte [] из SoapObject

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?

ответ

0

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

byte[] b = string.getBytes(); 
+0

Мне нужны эти байты, чтобы преобразовать их в растровое изображение –

0

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

byte[] bitmapdata = blob.toByteArray(); 

и если растровая данные массивы байт затем получить растровое изображение идет как этого

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

Надеется, что это помощь.