El envío de los archivos (por lo menos 11 archivos) de la carpeta a través del servicio web para la aplicación para Android

StackOverflow https://stackoverflow.com/questions/4544965

Pregunta

Me atrapado en medio de esta situación, por favor me ayude.

Mi pregunta es que quiero enviar archivos (Total 11 archivos PDF) a la aplicación para Android utilizando el servicio web.

Lo he probado con código de abajo. Clase Principal de la cual se crea el servicio web

public class MultipleFilesImpl implements MultipleFiles {

public FileData[] sendPDFs() {
    FileData fileData = null;
    // List<FileData> filesDetails = new ArrayList<FileData>();
    File fileFolder = new File(
            "C:/eclipse/workspace/AIPWebService/src/pdfs/");
    // File fileTwo = new File(
    // "C:/eclipse/workspace/AIPWebService/src/simple.pdf");

    File sendFiles[] = fileFolder.listFiles();
    // sendFiles[0] = fileOne;
    // sendFiles[1] = fileTwo;

    DataHandler handler = null;
    char[] readLine = null;
    byte[] data = null;
    int offset = 0;
    int numRead = 0;
    InputStream stream = null;
    FileOutputStream outputStream = null;
    FileData[] filesData = null;
    try {
        System.out.println("Web Service Called Successfully");

        for (int i = 0; i < sendFiles.length; i++) {
            handler = new DataHandler(new FileDataSource(sendFiles[i]));
            fileData = new FileData();
            data = new byte[(int) sendFiles[i].length()];
            stream = handler.getInputStream();
            while (offset < data.length
                    && (numRead = stream.read(data, offset, data.length
                            - offset)) >= 0) {
                offset += numRead;
            }
            readLine = Base64Coder.encode(data);
            offset = 0;
            numRead = 0;
            System.out.println("'Reading File............................");
            System.out.println("\n");
            System.out.println(readLine);
            System.out.println("Data Reading Successful");

            fileData.setFileName(sendFiles[i].getName());
            fileData.setFileData(String.valueOf(readLine));

            readLine = null;
            System.out.println("Data from bean " + fileData.getFileData());

            outputStream = new FileOutputStream("D:/"
                    + sendFiles[i].getName());

            outputStream.write(Base64Coder.decode(fileData.getFileData()));

            outputStream.flush();
            outputStream.close();
            stream.close();
            // FileData fileDetails = new FileData();
            // fileDetails = fileData;
            // filesDetails.add(fileData);
            filesData = new FileData[(int) sendFiles[i].length()];
        }
        // return fileData;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return filesData;
}

}

La interfaz también MultipleFiles: -

public interface MultipleFiles extends Remote {
    public FileData[] sendPDFs() throws FileNotFoundException, IOException,
            Exception;
}

Aquí estoy enviando un variedad de frijol "Archivo de datos" , que tiene propiedades a saber. FileData y nombre de archivo. FileData- contiene los datos del archivo en codificada. FileName- nombre de archivo codificado.

El Bean: - (FileData)

public class FileData {
    private String fileName;
    private String fileData;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFileData() {
        return fileData;
    }

    public void setFileData(String string) {
        this.fileData = string;
    }

}

las DDM androide da excepción de memoria insuficiente cuando se trató a continuación código y cuando he intentado enviar dos archivos a continuación, sólo el primer archivo se crea.

public class PDFActivity extends Activity {
    private final String METHOD_NAME = "sendPDFs";
    private final String NAMESPACE = "http://webservice.uks.com/";
    private final String SOAP_ACTION = NAMESPACE + METHOD_NAME;
    private final String URL = "http://192.168.1.123:8080/AIPWebService/services/MultipleFilesImpl";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView textViewOne = (TextView) findViewById(R.id.textViewOne);

        try {
            SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.setOutputSoapObject(soapObject);

            textViewOne.setText("Web Service Started");
            AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);

            httpTransport.call(SOAP_ACTION, envelope);

            // SoapObject result = (SoapObject) envelope.getResponse();
            Object result = envelope.getResponse();
            Log.i("Result", result.toString());
            // String fileName = result.getProperty("fileName").toString();
            // String fileData = result.getProperty("fileData").toString();

            // Log.i("File Name", fileName);
            // Log.i("File Data", fileData);

            // File pdfFile = new File(fileName);


            // FileOutputStream outputStream =
            // openFileOutput(pdfFile.toString(),
            // MODE_PRIVATE);

            // outputStream.write(Base64Coder.decode(fileData));
            Log.i("File", "File Created");
            // textViewTwo.setText(result);
            // Object result = envelope.getResponse();
            // FileOutputStream outputStream = openFileOutput(name, mode)

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

Por favor, ayuda con alguna explicación o cambios en mi código. Gracias por adelantado.

¿Fue útil?

Solución

Yo consiguió la solución de esta cuestión.

El principal problema que tuvimos usando kSoap2 API versión 2.4 es que no puedo capaz de conseguir objeto complejo (variedad de frijol en mi caso)

A continuación, he cambiado mi código de esto (usando ver 2.4): -

try {
            SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.setOutputSoapObject(soapObject);

            textViewOne.setText("Web Service Started");
            AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);

            httpTransport.call(SOAP_ACTION, envelope);

            // SoapObject result = (SoapObject) envelope.getResponse();
            Object result = envelope.getResponse();
            Log.i("Result", result.toString());
            // String fileName = result.getProperty("fileName").toString();
            // String fileData = result.getProperty("fileData").toString();

            // Log.i("File Name", fileName);
            // Log.i("File Data", fileData);

            // File pdfFile = new File(fileName);


            // FileOutputStream outputStream =
            // openFileOutput(pdfFile.toString(),
            // MODE_PRIVATE);

            // outputStream.write(Base64Coder.decode(fileData));
            Log.i("File", "File Created");
            // textViewTwo.setText(result);
            // Object result = envelope.getResponse();
            // FileOutputStream outputStream = openFileOutput(name, mode)

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

para el código (usando ver 2.5.1): -

    try {
        SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);

        envelope.setOutputSoapObject(soapObject);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.call(SOAP_ACTION, envelope);

        SoapObject result = (SoapObject) envelope.bodyIn;

        for (int i = 0; i < result.getPropertyCount(); i++) {
            SoapObject object = (SoapObject) result.getProperty(i);

            Log.i("File Data", object.getProperty("fileData").toString());
            Log.i("File Name", object.getProperty("fileName").toString());

            pdfFiles = new File(object.getProperty("fileName").toString());
            outputStream = openFileOutput(pdfFiles.toString(), MODE_PRIVATE);
            outputStream.write(Base64Coder.decode(object.getProperty(
                    "fileData").toString()));
        }

        outputStream.flush();
        outputStream.close();
        Log.d("File Creation Message", "Files Created Succesfully");
    } catch (SoapFault fault) {
        fault.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (outputStream != null) {
            outputStream = null;
        }
    }

Por lo tanto me dieron solución.

La ayuda principal es a través de la emisión-24 del presente: - Por favor, lea que si u se enfrentan a ese problema Link-Edición-24

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top