2014-09-25 17 views
1

獲取圖片在使用Web Service和Ksoap2獲取圖片在使用android系統中

我使用.NET Web服務的上傳圖片的Web服務和Ksoap2當一個人在畫廊在智能手機中選擇一個PIC 。

爲了實現這個,我使用了ksoap2。

在我的服務我送一個字符串作爲參數,下面我的代碼:

File myFile = new File(imagepath); 
Log.d(TAG, "myFile: " + myFile); 
Request.addProperty("bytes", myFile); 

SoapObject Request = new SoapObject(
     WSDL_TARGET_NAMESPACE, OPERATION_NAME); 


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
     SoapEnvelope.VER11); 


envelope.dotNet = true; 
envelope.setOutputSoapObject(Request); 


HttpTransportSE androidHttpTransport = new HttpTransportSE(
     SOAP_ADDRESS); 
androidHttpTransport.debug = true; 

try { 

    androidHttpTransport.call(SOAP_ACTION, envelope); 

    SoapPrimitive resultString = (SoapPrimitive) envelope 
      .getResponse(); 

    Log.d(TAG, "form webservice: " 
      + resultString); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

不幸的是,我的矢量顯示爲空,我不斷獲得的logcat得到一個解析錯誤:

09-25 14:29:58.490: TAG(10919): 
myFile: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg 

09-25 14:29:58.530: W/System.err(10919): 
java.lang.RuntimeException: Cannot serialize: /storage/emulated/0/DCIM/Camera/20140923_084731.jpg 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:708) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:692) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:661) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:645) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:702) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:618) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:198) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.transport.Transport.createRequestData(Transport.java:111) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:119) 

09-25 14:29:58.530: W/System.err(10919):   
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 

09-25 14:29:58.530: W/System.err(10919):   
at com.up.upload.MainActivity$2.run(MainActivity.java:237) 

09-25 14:29:58.530: W/System.err(10919):   
at java.lang.Thread.run(Thread.java:841) 

我想知道如果有人可以幫我解決問題,你有什麼建議嗎?

在此先感謝。

+0

有U得到了它的任何解決方案? – 1911192110920 2016-10-06 06:00:58

回答

0

試試這個:

public void UploadImage(String image, String imageName) { 

    String lStr = imagepath; 

    File myFile = new File(imagepath); 
    Log.d(TAG, "myFile: " + myFile); 

    SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE, 
      OPERATION_NAME); 

    byte[] bytearray = null; 
    try { 
     FileInputStream is = new FileInputStream(mFile); 
     if (mFile != null) 
      try { 
       bytearray = streamToBytes(is); 
      } finally { 
       is.close(); 
      } 
    } catch (Exception e) { 
    } 

    Request.addProperty("bytes", bytearray); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 

    new MarshalBase64().register(envelope); 
    envelope.dotNet = true; 
    envelope.encodingStyle = "UTF-8"; 
    envelope.setOutputSoapObject(Request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS); 
    androidHttpTransport.debug = true; 

    try { 

     androidHttpTransport.call(SOAP_ACTION, envelope); 

     SoapPrimitive resultString = (SoapPrimitive) envelope.getResponse(); 
     Log.d(TAG, "From webservice: " + resultString); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 


public static byte[] streamToBytes(InputStream is) { 
    ByteArrayOutputStream os = new ByteArrayOutputStream(1024); 
    byte[] buffer = new byte[1024]; 
    int len; 
    try { 
     while ((len = is.read(buffer)) >= 0) { 
      os.write(buffer, 0, len); 
     } 
    } catch (java.io.IOException e) { 
    } 
    return os.toByteArray(); 
} 


     new Thread(new Runnable() { 
      public void run() { 
       try { 

        String lStr = imagepath; 
        UploadImage(
          imagepath, 
          lStr.substring(lStr.lastIndexOf("/")).replace(
            "/", "")); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        Log.e(TAG, "Error..", e); 
       } 
      } 
     }).start();