2013-07-03 5 views
5

私は、Webサービスからいくつかのファイルをダウンロードする必要のあるAndroidアプリケーションを開発中です。Android httppostの結果としてpdfファイルを入手

ゴール

私は、WebサービスからPDFファイルをダウンロードし、携帯電話にそれを表示します。私は初心者Webサービスと連携し、I'dontだ

問題

は、ファイルを取得し、それを開くためにどのように明確に持っています。

ここでは、これまでの私のコードです:

public void downloadFile(String username, String password, String filename) {  
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("username", username)); 
    nameValuePairs.add(new BasicNameValuePair("password", password)); 
    nameValuePairs.add(new BasicNameValuePair("filename", filename)); 

    String output = httpPost(URL_DESCARGAS, nameValuePairs); 
} 

private String httpPost(String url, List<NameValuePair> nameValuePairs) { 
    /* Create new HttpClient and Post Header */ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(url); 

    try { 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

     /* Get output */    
     return inputStreamToString(response.getEntity().getContent()).toString(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 

私は応答の文字列を返す必要はありませんが、私は私がしなければならないのか分かりません。どのようにWebサービスを返すpdfを表示するのですか?

私は同じ実行する必要がある別のアクティビティでは、Webサービスは.pngを返し、イメージビューやそのようなもので表示したいと思います。それは同じ方法で行われますか?

ありがとうございました。私は長い間検索しましたが、何も見つかりませんでした。 (私はSDカードのルートにそれを見ることはありません)http://www.androidsnippets.com/download-an-http-file-to-sdcard-with-progress-notification と私はそれが言うことを使用しますが、ファイルが作成されません。

編集

私はそのURLを見つけました。ここで

は私の変更されたコードです:

public void downloadFile(String username, String password, String filename) {  
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("username", username)); 
    nameValuePairs.add(new BasicNameValuePair("password", password)); 
    nameValuePairs.add(new BasicNameValuePair("filename", filename)); 

    HttpResponse response = httpPost(URL_DESCARGAS, nameValuePairs); 
    HttpEntity entity = response.getEntity(); 
    if (entity != null) { 
     try { 
      InputStream inputStream = entity.getContent(); 
      //set the path where we want to save the file 
      //in this case, going to save it on the root directory of the 
      //sd card. 
      File SDCardRoot = Environment.getExternalStorageDirectory(); 
      //create a new file, specifying the path, and the filename 
      //which we want to save the file as. 
      File file = new File(SDCardRoot, filename); 

      //this will be used to write the downloaded data into the file we created 
      FileOutputStream fileOutput = new FileOutputStream(file); 

      //create a buffer... 
      byte[] buffer = new byte[1024]; 
      int bufferLength = 0; //used to store a temporary size of the buffer 

      //now, read through the input buffer and write the contents to the file 
      while ((bufferLength = inputStream.read(buffer)) > 0) { 
       //add the data in the buffer to the file in the file output stream (the file on the sd card 
       fileOutput.write(buffer, 0, bufferLength); 
      } 
      //close the output stream when done 
      fileOutput.close(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

あなたは私を助けることができますか?私はそのファイルを作成し、現時点で電話に表示する必要があります。

答えて

3

私はそれを解決しました。私はAndroidManifest.xmlに権限を入れるのを忘れていました。ここで

は、httppostの出力を取得する私のコードでSDカード内のファイルを作成し、ユーザーがデバイスにインストールされていることを、PDFビューアで開きます:

Activityクラス

public void downloadInvoice(View view) { 
    boolean ok = myApplication.downloadFile("pdf"); 
    if (!ok) { 
     //If not ok, show error message 
    } else { 
     //Open file in pdf viewer that user has in the device 
     File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
       +"/"+ myApplication.getActualUser().getActualInvoice().getPdf()); 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file)); 
     intent.setType("application/pdf"); 
     startActivity(intent); 
    } 
} 

AndroidManifest .xml

... 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
... 
関連する問題