I discovered the real problem of my code when I did the Juven_v test: when WS returned me a single result it had the error of java.lang.ClassCastException: org.ksoap2.serialization.SoapObject cannot be cast to java.util.Vector
because I was trying to pass a single SoapObject to a Vector.
What I did then I handled the exception, that is, each time it fails to cast to the Vector I send in the catch it passes to a single SoapObject because it only came from a WS result. I do not know if it is the most practical or the best performace is what it has for the moment and is solving.
Here is the code
public ArrayList<CidadesAt> buscarcidades(String uf){
ArrayList<CidadesAt> resultado = new ArrayList<CidadesAt>();
SoapObject buscacidade = new SoapObject(NAMESPACE,buscarcidsat);
buscacidade.addProperty("uf", uf);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(buscacidade);
envelope.implicitTypes =true;
HttpTransportSE http = new HttpTransportSE(Proxy.NO_PROXY,URL,timeout);
try {
http.call("urn:" + buscarcidsat, envelope);
Vector<SoapObject> resposta = (Vector<SoapObject>) envelope.getResponse();//se vier um vetor segue daqui
if(resposta != null) {
for (SoapObject so : resposta) {
CidadesAt cidades = new CidadesAt();
cidades.setCidade(so.getProperty(0).toString());
resultado.add(cidades);
}
}
}catch( java.lang.ClassCastException e) {//trata aqui caso tenha Exception de cast quer dizer que foi so um registro
e.printStackTrace();
try {
SoapObject resposta = (SoapObject) envelope.getResponse();
if (resposta != null) {
CidadesAt cidades = new CidadesAt();
cidades.setCidade(resposta.getProperty(0).toString());
resultado.add(cidades);
}
return resultado;
} catch (Exception e2) {
e2.printStackTrace();
return null;
}
}catch (Exception e3) {//outro tipo de Exception
e3.printStackTrace();
return null;
}
return resultado;
}
That's it, thank you all and hug.