Android 无法将org.ksoap2.serialization.SoapPrimitive强制转换为org.ksoap2.serialization.SoapObject

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 =

我在使用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 = "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();