2011-11-15 2 views
6

을 사용 된 .apk 파일을 전송하고 내가 바이트로 내 안드로이드 응용 프로그램에서 ksoap 프로토콜을 사용하여 웹 서비스를 소비 한내가 바이트 배열로 내 APK 파일을 변환 한 웹 서비스

[WebMethod] 
    public byte[] GetApkFile(string deviceID) 
    { 
     try 
     { 
      string path = ServiceHelper.GetTempFilePath(); 
      string fileName = path + "\\VersionUpdate.apk"; 
      FileStream fileStream = File.OpenRead(fileName); 
      return ConvertStreamToByteBuffer(fileStream);   
     } 
     catch (Exception ex) 
     { 
      throw ex; 

     } 

    } 

     public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream) 
    { 
     int b1; 
     System.IO.MemoryStream tempStream = new System.IO.MemoryStream(); 
     while ((b1 = theStream.ReadByte()) != -1) 
     { 
      tempStream.WriteByte(((byte)b1)); 
     } 
     return tempStream.ToArray(); 
    } 

을 다음과 같이 웹 서비스를 사용하여 보낼 필요 아래 주어진대로 배열

public void DownloadApkFile(String serverIPAddress, 
     String deviceId) { 

    String SOAP_ACTION = "http://VisionEPODWebService/GetApkFile"; 
    String OPERATION_NAME = "GetApkFile"; 
    String WSDL_TARGET_NAMESPACE = "http://VisionEPODWebService/"; 
    String SOAP_ADDRESS = ""; 
    SOAP_ADDRESS = "http://" + serverIPAddress 
      + "/VisionEPODWebService/SystemData.asmx"; 
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, 
      OPERATION_NAME); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER10); 
    new MarshalBase64().register(envelope); 
    envelope.encodingStyle = SoapEnvelope.ENC; 
    request.addProperty("deviceID", deviceId); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); 
    try { 
     httpTransport.call(SOAP_ACTION, envelope); 
     Object response = envelope.getResponse(); 
     byte[] b=response.toString().getBytes(); 

     String fileName = "/sdcard/" + "VersionUpdate" + ".apk"; 

     FileOutputStream fileOuputStream = 
        new FileOutputStream(fileName); 
     fileOuputStream.write(b); 
     fileOuputStream.close();   

    } 

    catch (Exception exception) { 
     exception.toString();   
    } 

문제점은 바이트 배열 []을 파일로 다시 변환 한 후 정확한 apk 파일을 가져 오지 못하는 것입니다.

누구든지 코드를 검토하고이 버그가 있는지 알려주십시오.

변환을 위해 byte [] apk 파일을 sdcard의 .apk 파일로 다시 가져와야합니다.

답변

1

response.toString()은 APK의 문자열 표현이 아닙니다.

는 다음과 같은 시도 : 나는 그것을 시도

SoapObject result = (SoapObject)envelope.bodyIn; 
byte[] b=result.toString().getBytes(); 
+0

...하지만 문제는 내가 그것을 자바 부분에 올 때 그것은 APK에 다시 구문 분석 할 수 없습니다 닷 넷 webservice.So을 사용하여 파일을 변환하고 있다는 것입니다 Java 통신에 자바라면 가능합니다. –

관련 문제