[英]Downloading pdf file and saving to SD card
I want to download and save pdf file to internal storage. 我想下载并保存pdf文件到内部存储。 Here is code that i am using:
这是我正在使用的代码:
I am calling my method from other class: 我从其他类调用我的方法:
new Thread(new Runnable() {
public void run() {
new Main().downloadPdfContent("http://people.opera.com/howcome/2005/ala/sample.pdf");
}
}).start();
Method look like this: 方法如下:
public void downloadPdfContent(String urlToDownload){
URLConnection urlConnection = null;
try{
URL url = new URL(urlToDownload);
//Opening connection of currrent url
urlConnection = url.openConnection();
urlConnection.connect();
//int lenghtOfFile = urlConnection.getContentLength();
String PATH = Environment.getExternalStorageDirectory() + "/1/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "test.pdf");
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = url.openStream();
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) {
// TODO: handle exception
e.printStackTrace();
}
}
I found link of pdf on the web: http://people.opera.com/howcome/2005/ala/sample.pdf 我在网上找到了pdf的链接: http : //people.opera.com/howcome/2005/ala/sample.pdf
However i get an exception on this line: 但是我在这一行得到了一个例外:
urlConnection.connect(); urlConnection.connect();
Exception: java.net.UnknownHostException: people.opera.com 例外: java.net.UnknownHostException:people.opera.com
I can't figure out what's wrong. 我无法弄清楚出了什么问题。 Maybe someone could take a look.
也许有人可以看看。
Thanks. 谢谢。
Put 放
<uses-permission android:name="android.permission.INTERNET"/>
in your AndroidManifest.xml 在AndroidManifest.xml中
Follow following steps : 请遵循以下步骤:
1) Declare file name 1)声明文件名
String fileName;
//for image
fileName = "matchfine1.png";
//for pdf
fileName = "samplepdf.pdf";
2) Call method to invoke download process. 2)调用下载过程的调用方法。
startDownload(fileName);
3) Define startDownload method: 3)定义startDownload方法:
//for download file start
private void startDownload(String filename) {
String filedowname = filename;
//for image
String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
//for pdf
String url = "http://people.opera.com/howcome/2005/ala/sample.pdf";
new DownloadFileAsync().execute(url,filedowname);
}
4) For auto loading progressBar: 4)对于自动加载progressBar:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading file..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
5) Define the download process extending AsyncTask 5)定义扩展AsyncTask的下载过程
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(final String... aurl) {
try {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "/Your_file_save_path/");
if(dir.exists()==false) {
dir.mkdirs();
}
URL url = new URL(aurl[0]);
String filename = aurl[1];
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(dir+"/"+filename);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC", progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
//for download file end
6) Replace "Your_file_save_path" by your file path in dir. 6)用dir中的文件路径替换“Your_file_save_path”。 and then download and check in the specified location.
然后下载并检查指定的位置。
I have used the same code and got Network.onThreadException Error . 我使用了相同的代码并得到了Network.onThreadException错误 。
But then after using this piece of code in my oncreate() method, I was able to resolve the issue. 但是在我的oncreate()方法中使用这段代码之后,我就能够解决这个问题了。
if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.