2017-08-22 41 views
0
發送的ArrayList

我試圖發送一個ArrayList這是一個編碼字符串並獲得使用Ksoap2

了java.lang.RuntimeException:無法序列:[abc.docx,def.docx]

這是我如何將其轉換爲字節數組,並向其傳遞:

public static String convertFileToByteArray(File f) { 
    byte[] byteArray = null; 
    try { 
     InputStream inputStream = new FileInputStream(f); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte[] b = new byte[1024 * 11]; 
     int bytesRead = 0; 
     while ((bytesRead = inputStream.read(b)) != -1) { 
      bos.write(b, 0, bytesRead); 
     } 
     byteArray = bos.toByteArray(); 

     Log.e("Byte array", ">" + byteArray); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return Base64.encodeToString(byteArray, Base64.NO_WRAP); 
} 

添加它,如圖所示ArrayList中:

ArrayList<String> encodedlist = new ArrayList<String>(); 
encodedString = convertFileToByteArray(mySelectedFile); 
encodedlist.add(encodedDocument); 

這是我的代碼,將其發送到服務器端:

public static boolean invokeUploadMultipleDocuments(String RandomFolder, ArrayList FileNames, String webMethodName) { 
    boolean UploadStatus = false; 
    // Create request 
    SoapObject request = new SoapObject(NAMESPACE, webMethodName); 
    // Property which holds input parameters 
    PropertyInfo filenamePI = new PropertyInfo(); 

    // Set Filenames 
    filenamePI.setName("FileNames"); 
    // Set Value 
    filenamePI.setValue(FileNames); 
    // Set dataType 
    filenamePI.setType(ArrayList.class); 
    // Add the property to request object 
    request.addProperty(filenamePI); 

    // Create envelope 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    // Set output SOAP object 
    envelope.setOutputSoapObject(request); 
    // Create HTTP call object 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    try { 
     // Invoke web service 
     androidHttpTransport.call(SOAP_ACTION+webMethodName, envelope); 
     // Get the response 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
     // Assign it to boolean variable variable 
     UploadDocumentStatus = Boolean.parseBoolean(response.toString()); 
    } catch (Exception e) { 
     //Assign Error Status true in static variable 'errored' 
     MainActivity.errored = true; 
     e.printStackTrace(); 
    } 
    //Return booleam to calling object 
    return UploadStatus; 
} 

回答

0

您可以使用GSON庫的依賴 在的build.gradle文件

dependencies { 
    compile 'com.google.code.gson:gson:2.2.4' 
} 

然後使用下面的代碼

List<List> encodedlist = Arrays.asList(Arrays.asList("one", "two","three"), 
             Arrays.asList("four", "five","six")); 

String levelPatternGson = new Gson().toJson(encodedlist); 
invokeUploadMultipleDocuments(levelPatternGson); 

現在發送到服務器端的代碼

public SoapObject invokeUploadMultipleDocuments(String levelPatternGson){ 
     SoapObject request = new SoapObject(NAMESPACE, webMethodName); 
     SoapObject WebRq = new SoapObject("", "PropertyInfo"); 
     WebRq.addProperty("FileNames",FileNames); 
     request.addSoapObject(WebRq); 
     return request; 
     } 

注:我沒有嘗試自己,但可能會這樣,它會工作。