0

这是我的第一篇文章 - 所以我希望在代码格式方面做的一切都是正确的。

也许您可以帮助我解决以下问题:

使用 API 级别 10 及更高版本,我所有的 HttpURLConnections 都可以正常工作,但是使用 API 级别 8 时,我尝试下载文件(txt、html……)的内容的一些(或有时大部分)失败。

只要服务器返回响应代码“-1”,我就通过重复下载来解决这个问题。这不是很令人满意,但它有效(或多或少)——但我想它只是因为我收到的内容很短(最多 100 个字符)——有时我认为最后省略了一些字符,也。

但是现在我尝试实现一个更新例程(下载并安装一个 apk 文件),但大多数情况下都失败了,因为 apk 文件是碎片化的(我猜),所以在尝试安装文件时出现“解析错误” .

我究竟做错了什么?

感谢您的任何帮助(如果您比我好,请保持友好

这是我的更新例程的代码(如您所见,它没有如上所述的重复机制):

    String download_url  = "http://url/";
    String download_file = "name.apk";

    //Local
    String update_file = download_file;
    File update_file_stream = context.getFileStreamPath(update_file);

    //Connect
    URL url = new URL(download_url + download_file);
    HttpURLConnection c = (HttpURLConnection) url.openConnection();
    c.setRequestMethod("GET");
    c.setDoOutput(true);
    c.connect();

    //Delete local File?
    if(update_file_stream.exists()){

        update_file_stream.delete();
    }

    //Download File
    FileOutputStream fos = context.openFileOutput(update_file, Context.MODE_WORLD_READABLE);
    InputStream is = c.getInputStream();
    byte[] buffer = new byte[4096];
    int len1 = 0;
    while ((len1 = is.read(buffer)) != -1) {
        fos.write(buffer, 0, len1);
    }
    fos.close();
    is.close();

    //Install
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(update_file_stream), "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
4

1 回答 1

0

看起来像主线程问题上的网络。

在以前的 android sdk 版本(可能是 8)中,您可以在主线程上做一些网络

但是在 ICS 或 Honeycomb 之后,你不能在主线程上做任何网络工作。

于 2013-02-24T11:18:21.353 回答