2010-12-28 7 views
2

私はこの状況の真っ只中に立ち往生しました。私を助けてください。フォルダからWebサービスを介してファイル(少なくとも11ファイル)をアンドロイドアプリに送信

私の質問は、Webサービスを使用してAndroidアプリケーションにファイル(合計11個のPDFファイル)を送信したいということです。

以下のコードで試しました。

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

ここで私は豆 "ファイルデータ"の配列を送っています、 - :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; 
} 

}

インタフェースMultipleFilesを作成しているからメイン・クラス特性を有する。 FileData & FileName。 FileData-ファイルデータがエンコードされています。 FileNameエンコードされたファイル名。

豆: - (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; 
    } 

} 

私は、最初のファイルのみが作成された2つのファイルを送信しようとしたとき、コード&下にしようとしたときにアンドロイドDDMSは、メモリ不足の例外与えます。

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

いくつかの説明やコードの変更をお待ちしております。 ありがとうございました。

答えて

4

私自身がこの質問の解決策を得ました。

私はkSoap2 APIの2.4バージョンを使用して直面する主要な問題は、私は複雑なオブジェクト(私の場合は、Beanの配列)を取得することはできないということです

は、それから私は、(2.4のver使って)ここから私のコードを変更: - このコード(2.5.1のver使用)に

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

: -

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

そこで私は解決策を得ました。

主なヘルプは、次の24の問題です。 - このような問題に直面している場合は、必ずお読みください。 Link-Issue-24

関連する問題