使用下面的代码并能够保存在应用程序缓存中但不能保存在SD卡中。在sd卡中保存的文件是0字节无法得到确切的错误.....提前感谢
final FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
final HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
Thread thread = new Thread(new Runnable() {
@SuppressWarnings("deprecation")
@Override
public void run() {
try {
c.connect();
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
int flag = 0;
while ((len1 = in.read(buffer)) != -1) {
f.write(buffer, 0, len1);
Log.d("Thread ", String.valueOf(len1));
}
f.close();
thread.start();
} catch (Exception e) {
Toast.makeText(this, "In exception", Toast.LENGTH_LONG).show();
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
答案 0 :(得分:0)
使用以下代码下载任何类型的文件。我检查过这个。它就像一个魅力。
请检查一下。
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
public class DownloadMultimedia extends AsyncTask<Void, Void, Void> {
protected static final int SHOW_PROGRESS_DIALOG = 0x5;
protected static final int STOP_PROGRESS_DIALOG = 0x6;
protected static final int NETWORK_FAILURE = 0x7;
protected static final int PROBLEM_IN_CONNECTING_SERVER = 0x8;
protected static final int DOWNLOADED_SUCCESS = 0x12;
protected static final int DOWNLOADED_FAILED = 0X13;
private URL url;
private String PATH;
private String fileName = "";
private Context context;
private String mReceivedURL = "";
public DownloadMultimedia(Context context,
String mReceivedURL) {
// TODO Auto-generated constructor stub
// Here Received URL is your url to download.
this.context = context;
this.mReceivedURL = mReceivedURL;
fileName = mReceivedURL.substring(mReceivedURL.lastIndexOf("/") + 1,
mReceivedURL.length());
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
downloadPhoto(mReceivedURL);
return null;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mHandler.sendEmptyMessage(SHOW_PROGRESS_DIALOG);
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
mHandler.sendEmptyMessage(STOP_PROGRESS_DIALOG);
}
public void downloadPhoto(String Video_URL) {
try {
url = new URL(Video_URL);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
PATH = Environment.getExternalStorageDirectory()
+ "/Media/Videos/";
Log.d("", "the path to store : " + PATH);
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, fileName);
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();
mHandler.sendEmptyMessage(DOWNLOADED_SUCCESS);
} catch (Exception e) {
mHandler.sendEmptyMessage(DOWNLOADED_FAILED);
Log.d("TAG", " downloadVideo exception " + e.getMessage());
}
}
Handler mHandler = new Handler() {
private ProgressDialog progressDialog;
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SHOW_PROGRESS_DIALOG:
if (progressDialog == null) {
progressDialog = Utils.createProgressDialog(context);
progressDialog.show();
} else {
progressDialog.show();
}
mHandler.removeMessages(SHOW_PROGRESS_DIALOG);
break;
case STOP_PROGRESS_DIALOG:
progressDialog.dismiss();
mHandler.removeMessages(STOP_PROGRESS_DIALOG);
break;
case NETWORK_FAILURE:
Utils.displayToast(context, Constant.NO_NETWORK_CONNECTION);
mHandler.removeMessages(NETWORK_FAILURE);
break;
case PROBLEM_IN_CONNECTING_SERVER:
Utils.displayToast(context,
Constant.PROBLEM_IN_CONNECTING_SERVER);
mHandler.removeMessages(PROBLEM_IN_CONNECTING_SERVER);
break;
case DOWNLOADED_SUCCESS:
Utils.displayToast(context, "File has been downloaded");
mHandler.removeMessages(DOWNLOADED_SUCCESS);
break;
case DOWNLOADED_FAILED:
Utils.displayToast(context, "Error, Try again later");
mHandler.sendEmptyMessage(DOWNLOADED_FAILED);
break;
default:
break;
}
};
};
}
与此同时,我将查看您的代码并检查错误。