-1

我正在开发一个应用程序,在单击提交按钮后,使用在 edittext 中输入的 url 下载 sd 卡中的 pdf 文件。

       Button b = (Button)findViewById(R.id.button1);
       final EditText ed = (EditText)findViewById(R.id.editText1);
       b.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
         String URL  = ed.getText().toString();
          WebView web1 =(WebView)findViewById(R.id.webview);
          web1.getSettings().setJavaScriptEnabled(true);
           web1.loadUrl(URL);  
           }
          });
4

2 回答 2

1

这里 urlToDownload 是您的编辑文本的文本,将方法写入您的按钮单击事件以下载 pdf 文件。

public void downloadPdfContent(String urlToDownload){
     try {
          String fileName="xyz";
          String fileExtension=".pdf";
          //download pdf file.
          URL url = new URL(urlToDownload);
          HttpURLConnection c = (HttpURLConnection) url.openConnection();
          c.setRequestMethod("GET");
          c.setDoOutput(true);
          c.connect();
          String PATH = Environment.getExternalStorageDirectory() + "/mydownload/";
          File file = new File(PATH);
          file.mkdirs();
          File outputFile = new File(file, fileName+fileExtension);
          FileOutputStream fos = new FileOutputStream(outputFile);
          InputStream is = c.getInputStream();
          byte[] buffer = new byte[1024];
          int len1 = 0;
          while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
          }
          fos.close();
          is.close();
          System.out.println("--pdf downloaded--ok--"+urlToDownload);
     } catch (Exception e) {
          e.printStackTrace();
     }
}

并将 write_external_storage 权限授予您的应用程序清单文件。

于 2012-06-06T11:41:48.277 回答
1

下面的代码可以帮助你 -

public class DownloaderThread extends Thread
{
        // constants
        private static final int DOWNLOAD_BUFFER_SIZE = 4096;

        // instance variables
        private AndroidFileDownloader parentActivity;
        private String downloadUrl;

        /**
         * Instantiates a new DownloaderThread object.
         * @param parentActivity Reference to AndroidFileDownloader activity.
         * @param inUrl String representing the URL of the file to be downloaded.
         */
        public DownloaderThread(AndroidFileDownloader inParentActivity, String inUrl)
        {
                downloadUrl = "";
                if(inUrl != null)
                {
                        downloadUrl = inUrl;
                }
                parentActivity = inParentActivity;
        }

        /**
         * Connects to the URL of the file, begins the download, and notifies the
         * AndroidFileDownloader activity of changes in state. Writes the file to
         * the root of the SD card.
         */
        @Override
        public void run()
        {
                URL url;
                URLConnection conn;
                int fileSize, lastSlash;
                String fileName;
                BufferedInputStream inStream;
                BufferedOutputStream outStream;
                File outFile;
                FileOutputStream fileStream;
                Message msg;

                // we're going to connect now
                msg = Message.obtain(parentActivity.activityHandler,
                                AndroidFileDownloader.MESSAGE_CONNECTING_STARTED,
                                0, 0, downloadUrl);
                parentActivity.activityHandler.sendMessage(msg);

                try
                {
                        url = new URL(downloadUrl);
                        conn = url.openConnection();
                        conn.setUseCaches(false);
                        fileSize = conn.getContentLength();

                        // get the filename
                        lastSlash = url.toString().lastIndexOf('/');
                        fileName = "file.bin";
                        if(lastSlash >=0)
                        {
                                fileName = url.toString().substring(lastSlash + 1);
                        }
                        if(fileName.equals(""))
                        {
                                fileName = "file.bin";
                        }

                        // notify download start
                        int fileSizeInKB = fileSize / 1024;
                        msg = Message.obtain(parentActivity.activityHandler,
                                        AndroidFileDownloader.MESSAGE_DOWNLOAD_STARTED,
                                        fileSizeInKB, 0, fileName);
                        parentActivity.activityHandler.sendMessage(msg);

                        // start download
                        inStream = new BufferedInputStream(conn.getInputStream());
                        outFile = new File(Environment.getExternalStorageDirectory() + "/" + fileName);
                        fileStream = new FileOutputStream(outFile);
                        outStream = new BufferedOutputStream(fileStream, DOWNLOAD_BUFFER_SIZE);
                        byte[] data = new byte[DOWNLOAD_BUFFER_SIZE];
                        int bytesRead = 0, totalRead = 0;
                        while(!isInterrupted() && (bytesRead = inStream.read(data, 0, data.length)) >= 0)
                        {
                                outStream.write(data, 0, bytesRead);

                                // update progress bar
                                totalRead += bytesRead;
                                int totalReadInKB = totalRead / 1024;
                                msg = Message.obtain(parentActivity.activityHandler,
                                                AndroidFileDownloader.MESSAGE_UPDATE_PROGRESS_BAR,
                                                totalReadInKB, 0);
                                parentActivity.activityHandler.sendMessage(msg);
                        }

                        outStream.close();
                        fileStream.close();
                        inStream.close();

                        if(isInterrupted())
                        {
                                // the download was canceled, so let's delete the partially downloaded file
                                outFile.delete();
                        }
                        else
                        {
                                // notify completion
                                msg = Message.obtain(parentActivity.activityHandler,
                                                AndroidFileDownloader.MESSAGE_DOWNLOAD_COMPLETE);
                                parentActivity.activityHandler.sendMessage(msg);
                        }
                }
                catch(MalformedURLException e)
                {
                        String errMsg = parentActivity.getString(R.string.error_message_bad_url);
                        msg = Message.obtain(parentActivity.activityHandler,
                                        AndroidFileDownloader.MESSAGE_ENCOUNTERED_ERROR,
                                        0, 0, errMsg);
                        parentActivity.activityHandler.sendMessage(msg);
                }
                catch(FileNotFoundException e)
                {
                        String errMsg = parentActivity.getString(R.string.error_message_file_not_found);
                        msg = Message.obtain(parentActivity.activityHandler,
                                        AndroidFileDownloader.MESSAGE_ENCOUNTERED_ERROR,
                                        0, 0, errMsg);
                        parentActivity.activityHandler.sendMessage(msg); 
                }
                catch(Exception e)
                {
                        String errMsg = parentActivity.getString(R.string.error_message_general);
                        msg = Message.obtain(parentActivity.activityHandler,
                                        AndroidFileDownloader.MESSAGE_ENCOUNTERED_ERROR,
                                        0, 0, errMsg);
                        parentActivity.activityHandler.sendMessage(msg); 
                }
        }

}

以上代码是从这个现有项目中提取的。不要忘记给予所需的权限Internet

于 2012-06-06T11:44:01.630 回答