[英]Download file with AsyncTask
I am trying to download a file with asyncTask but is not working, there is no error messages or nothing, just dont download the file... i try everything but it appears that is not entering on the while... anybody know what can be the problem? 我试图用asyncTask下载一个文件,但是没有工作,没有错误消息或什么都没有,只是不下载文件...我尝试了一切,但它似乎没有进入的同时...任何人都知道什么可以是问题? I tested on my mobile, the url is ok too. 我在手机上测试过,网址也可以。
class DownloadFileFromURL extends AsyncTask<String, String, String> {
/**
* Before starting background thread
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("Starting download");
}
/**
* Downloading file in background thread
* */
@Override
protected String doInBackground(String... f_url) {
int count;
try {
String root = Environment.getExternalStorageDirectory().toString();
System.out.println("Downloading");
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
// getting file length
int lenghtOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
// Output stream to write file
OutputStream output = new FileOutputStream(root+"/downloadedfile.jpg");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return null;
}
/**
* After completing background task
* **/
@Override
protected void onPostExecute(String file_url) {
System.out.println("Downloaded");
}
}
I just ran your code, and it works fine for me. 我只是运行你的代码,它对我来说很好。 The image was downloaded to the sdcard. 图像已下载到SD卡。
Just to note, make sure you have these permissions set in your AndroidManifest.xml: 请注意,请确保您在AndroidManifest.xml中设置了以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Here are the logs I got (note that I added a ProgressDialog
): 这是我得到的日志(注意我添加了ProgressDialog
):
03-21 16:53:46.422 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false
03-21 16:53:56.211 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false
03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Starting download
03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload D/Dialog﹕ checkMirrorLinkEnabled returns : false
03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload D/Dialog﹕ showing allowed
03-21 16:54:06.461 21017-25126/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Downloading
03-21 16:54:06.461 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false
03-21 16:54:06.481 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: left = 0
03-21 16:54:06.481 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: top = 0
03-21 16:54:06.491 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: right = 144
03-21 16:54:06.491 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: bottom = 144
03-21 16:54:11.596 21017-21017/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Downloaded
Just in case this will be useful, here is the full MainActivity.java code that worked for me. 为了防止这有用,这里是完整的MainActivity.java代码,对我有用。 (url is a placeholder): (url是占位符):
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends ActionBarActivity {
private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadFileFromURL().execute("http://www.example.com/IMG.jpg");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class DownloadFileFromURL extends AsyncTask<String, String, String> {
/**
* Before starting background thread
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("Starting download");
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading... Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* Downloading file in background thread
* */
@Override
protected String doInBackground(String... f_url) {
int count;
try {
String root = Environment.getExternalStorageDirectory().toString();
System.out.println("Downloading");
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
// getting file length
int lenghtOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
// Output stream to write file
OutputStream output = new FileOutputStream(root+"/downloadedfile.jpg");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return null;
}
/**
* After completing background task
* **/
@Override
protected void onPostExecute(String file_url) {
System.out.println("Downloaded");
pDialog.dismiss();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.