android应用程序下载文件

时间:2012-11-13 12:10:36

标签: android httpurlconnection urlconnection

我当前的Android应用程序会下载许多音频文件。当我使用此代码执行下载时,我找不到文件异常:

try {

    final URL downloadFileUrl = new URL("http://filelocation/url.m4a");
    final HttpURLConnection httpURLConnection = (HttpURLConnection) downloadFileUrl.openConnection();
    httpURLConnection.setRequestMethod("GET");
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setConnectTimeout(10000);
    httpURLConnection.setReadTimeout(10000);
    httpURLConnection.connect();

    mTrackDownloadFile = new File(Record.this.getCacheDir(), "mediafile");
    mTrackDownloadFile.createNewFile();
    final FileOutputStream fileOutputStream = new FileOutputStream(mTrackDownloadFile);
    final byte buffer[] = new byte[16 * 1024];

    final InputStream inputStream = httpURLConnection.getInputStream();

    int len1 = 0;
    while ((len1 = inputStream.read(buffer)) > 0) {
        fileOutputStream.write(buffer, 0, len1);
    }
    fileOutputStream.flush();
    fileOutputStream.close();

} catch (final Exception exception) {
    Log.i(TAG, "doInBackground - exception" + exception.getMessage());
    exception.printStackTrace();
    mTrackDownloadFile = null;
}

当我使用此代码时,它可以正常工作:

try {

    final URL downloadFileUrl = new URL("http://filelocation/url.m4a");
    final URLConnection urlConnection = downloadFileUrl.openConnection();

    mTrackDownloadFile = new File(PlayOpponent.this.getCacheDir(), "mediafile");
    mTrackDownloadFile.createNewFile();
    final FileOutputStream fileOutputStream = new FileOutputStream(mTrackDownloadFile);
    final byte buffer[] = new byte[16 * 1024];

    final InputStream inputStream = urlConnection.getInputStream();

    int len1 = 0;
    while ((len1 = inputStream.read(buffer)) > 0) {
        fileOutputStream.write(buffer, 0, len1);
    }
    fileOutputStream.flush();
    fileOutputStream.close();
} catch (final Exception exception) {
    Log.i(TAG, "doInBackground - exception" + exception.getMessage());
    exception.printStackTrace();
    mTrackDownloadFile = null;
}

有人可以指出我哪里出错吗?

1 个答案:

答案 0 :(得分:4)

根据此blog删除

httpURLConnection.setDoOutput(true);
您的代码中的

可能会解决问题。据说这是一个ICS问题。