2017-08-22 2 views
0

Ich versuche, eine Arraylist zu senden, die eine codierte Zeichenfolge undArraylist Ksoap2 mit Senden

java.lang.RuntimeException bekommen: Kann nicht serialisiert werden: [abc.docx, def.docx]

Dies ist, wie ich es bin Byte-Array konvertieren und weitergeben:

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); 
} 

Hinzufügen es wie abgebildet Arraylist:

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

Dies ist mein Code dafür zu Server-Seite zu senden:

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; 
} 

Antwort

0

Sie Gson Bibliothek Abhängigkeit In build.gradle Datei

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

Dann nutzen Sie unten-Code

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

String levelPatternGson = new Gson().toJson(encodedlist); 
invokeUploadMultipleDocuments(levelPatternGson); 
verwenden können

Jetzt Code zum Senden an die Serverseite

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; 
     } 

HINWEIS: Ich habe es nicht selbst versucht, aber vielleicht funktioniert es so.