android: Zip-папка недействительна

У меня есть 3 файла xml, которые были сжаты в zip-папку. Папка отправлена ​​с сервера. Когда я загружаю zip-папку через браузер, она работает правильно и может извлекать файлы. Но когда я загружаю его из приложения Android и сохраняю на SD-карте, он поврежден. Я вытащил файл с SD-карты на компьютер и попытался извлечь папку, он показывает: Zip-папка недействительна. Мой код приведен ниже:

DefaultHttpClient httpclient1 = new DefaultHttpClient();
                HttpPost httpPostRequest = new HttpPost(
                        Configuration.URL_FEED_UPDATE);
                            byte[] responseByte = httpclient1.execute(httpPostRequest,
                        new BasicResponseHandler()).getBytes();

                InputStream is = new ByteArrayInputStream(responseByte);


                // ---------------------------------------------------

                File file1 = new File(Environment
        .getExternalStorageDirectory() + "/ast");
                file1.mkdirs();
                //
                 File outputFile = new File(file1, "ast.zip");
                FileOutputStream fos = new FileOutputStream(outputFile);

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                }
                fos.close();                
                is.close();

Когда я использовал

ZipInputStream zin = new ZipInputStream(new BufferedInputStream(is));

ZipInputStream не может сохранять значения из потока.


person Master Mind    schedule 16.07.2013    source источник


Ответы (1)


Я предполагаю, что ваша главная ошибка - это то, где вы получаете входной поток. На самом деле вы получаете ответ сервера как String (BasicResponseHandler), а затем снова конвертируете его в байты. Поскольку Java - это все UTF-8, это, скорее всего, не сработает.

Лучше попробуйте что-нибудь вроде

HttpResponse response = httpclient1.execute(httpPostRequest);
InputStream is = response.getEntity().getContent()

(И лучше проверяйте нулевой указатель, прочтите содержимое в блоке try-catch и убедитесь, что вы закрыли все ресурсы в блоке finally.)

person ToBe_HH    schedule 16.07.2013