Android客户端Web服务

时间:2011-12-15 14:37:29

标签: android web-services

我需要一些帮助。

我正在开发一个应用程序android,它将一个字节数组和一个字符串发送到Web服务。

我的Android代码部分:

private static final int SELECT_VIDEO = 100;
private static final String NAMESPACE = "org.me.WebService";
private static final String URL = "http://192.168.1.4:8084/MyTubeWebService/MyTubeService?wsdl";    
private static final String SOAP_ACTION = "MyTubeService";
private static final String METHOD_NAME = "upArquivoVideo";

      //(...)
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);      
            SoapSerializationEnvelope envelope = 
                new SoapSerializationEnvelope(SoapEnvelope.VER11); 

            request.addProperty("arquivoVideo",video);
            request.addProperty("descricao", "teste");
            envelope.setOutputSoapObject(request);

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

            try {
                androidHttpTransport.call(SOAP_ACTION, envelope);
                //androidHttpTransport.call(NAMESPACE+"/"+METHOD_NAME,envelope);
                SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
                text.setText("Received :" + resultsRequestSOAP.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }

和网络服务代码:

@WebService(serviceName = "MyTubeService")
public class MyTubeService {

/**
 * Operação de serviço web
 */
@WebMethod(operationName = "upArquivoVideo")
@Oneway
public void upArquivoVideo(@WebParam(name = "arquivoVideo") byte[] arquivoVideo, @WebParam(name = "descricao") String descricao) {

    if ( arquivoVideo.length > 0 ){
        System.out.println("OK!");
    }else{
        System.out.println("Erro");
    }

    System.out.println("desricao = " + descricao);

}

Log cat一次调度Exception Socket Time out ...并在我上次测试时调度RuntimeException:无法序列化

我做错了什么?它是在android端吗?或者在网络服务方面?

1 个答案:

答案 0 :(得分:0)

首先,您需要提高接受率以获得答案。

我发现使用kso​​ap将字符串和字节数组发送到Web服务时遇到问题。

以下是将字符串发送到Web服务的一种方法:

   private String doLogin(String user_id, String password) 
    {
    SoapPrimitive resultstring = null;
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("user", user_id);
    request.addProperty("password", password);
    SoapSerializationEnvelope soapenvelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
    soapenvelope.dotNet = true;  //only if it is .net webservice                                                    
    soapenvelope.setOutputSoapObject(request);

    AndroidHttpTransport httptransport = new AndroidHttpTransport(URL);
    httptransport.debug = true;

    try {
            httptransport.call(SOAP_ACTION, soapenvelope);
            resultstring = (SoapPrimitive) soapenvelope.getResponse(); 
   //change above line depending upon the response you get                                                  


    }
    catch (SocketException ex) {
        Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
        ex.printStackTrace();
    } catch (Exception e) {
        Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage());
       e.printStackTrace();
    }
    return resultstring+"";

    }

SImilarly,我希望你能写一个代码来发送一个字节数组。有许多教程和代码片段可以帮助您。

希望这有帮助,

干杯