Android 无法将org.ksoap2.serialization.SoapPrimitive强制转换为org.ksoap2.serialization.SoapObject
我在使用Oracle数据库的NetBeans中有一个Web服务,当我在Android中进行选择时,我有一个例外Android 无法将org.ksoap2.serialization.SoapPrimitive强制转换为org.ksoap2.serialization.SoapObject,android,Android,我在使用Oracle数据库的NetBeans中有一个Web服务,当我在Android中进行选择时,我有一个例外 org.ksoap2.serialization.SoapObject cannot be cast to org.ksoap2.serialization.SoapPrimitive 以下是Web服务的代码: @WebMethod(operationName = "mostarNombre") public String mostarNombre(@WebParam(name =
org.ksoap2.serialization.SoapObject cannot be cast to org.ksoap2.serialization.SoapPrimitive
以下是Web服务的代码:
@WebMethod(operationName = "mostarNombre")
public String mostarNombre(@WebParam(name = "id") int id) {
String nomb = "";
try {
DriverManager.registerDriver(new OracleDriver());
Connection cn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:xxxx:xx", "SYSTEM", "xxxx");
PreparedStatement consultaEmp = cn.prepareStatement("select nombre from ejemplo where id=?");
consultaEmp.setInt(1, id);
ResultSet rs = consultaEmp.executeQuery();
if (rs.next()) {
nomb = rs.getString("nombre");
} else {
nomb = "No encontrado";
}
} catch (SQLException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
return nomb;
}
下面是Android Studio的代码:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
String resultadoFINAL;
//Creacion de la Solicitud
SoapObject request = new SoapObject(NAMESPACE, METHOD2);
//Creacion del Envelope
SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
sobre.setOutputSoapObject(request);
//Creacion del transporte
HttpTransportSE transporte = new HttpTransportSE(URL);
String texto = this.etId.getText().toString();
// Paso de parámetro
PropertyInfo numeroEmp = new PropertyInfo();
numeroEmp.setName("numero");
numeroEmp.setValue(texto);
numeroEmp.setType(Integer.class);
request.addProperty(numeroEmp);
//Llamada
transporte.call(SOAPACTION2, sobre);
//Resultado
SoapObject resultado = (SoapObject) sobre.getResponse();
resultadoFINAL = "Nombre: "+resultado.toString();
tvConsulta.setText(resultadoFINAL);
}catch (Exception e) {
e.printStackTrace();
}
例外情况如下:
SoapObject resultado = (SoapObject) sobre.getResponse();
我是WebService的新手,非常感谢您的帮助!!!:
编辑:
我试过:
SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();
这:
因此:
Object resultado = (Object) sobre.getResponse();
对于Object I get No encontrado,这就像在这个循环中,ResultSet没有next:
if (rs.next()) {
nomb = rs.getString("nombre");
} else {
nomb = "No encontrado";
}
而应该是:
SoapObject resultado = (SoapObject) sobre.getResponse();
。。。为了避免不可能的强制转换异常。Hmmm。。你真的应该避免使用线程策略。这是Android开发中的一种反模式。同样,如果你是web服务新手,我会指出HTTP上的JSON比SOAPWhat更受欢迎。你推荐我做什么?NetBeans其实并不重要。您可以在任何其他IDE中使用任何其他Web服务。Oracle最近发布了他们自己的Helidon,大多数人使用Spring Framework或Vert.x,但最近我一直在使用DropWizard我编辑了这个问题,我希望这对你有帮助,我没有例外,但我得到了anyType{}在resultado。ToString@Beardman如果没有看到相关的WSDL或纯文本响应,就无法说出原因/方式。anyType{}没有空响应信封的任何内容提示。我应该在我的问题后面附加什么?@Serializable类和原始响应信封可能有助于说明更多。。。有无数类似的问题:对不起,我再次检查,我也得到了例外
SoapObject resultado = (SoapObject) sobre.getResponse();