#java #android #sockets #zipfile #galaxy-tab
#java #Android #сокеты #zip #galaxy-tab
Вопрос:
У меня есть код, который отлично работает на эмуляторе, но когда я запускаю его на Samsung Galaxy Tab, он выдает исключение.
Я получаю один сжатый zip-файл с сервера через сокет, а затем извлекаю эти файлы. Если я сжимаю и отправляю два или три текстовых файла, он отлично работает как на эмуляторе, так и на Galaxy Tab.
Но если я сжимаю и отправляю какой-нибудь небольшой файл изображения с текстом или двумя файлами изображений, это выдает: > java.util.zip.ZipException: запись центрального каталога не найдена < на Galaxy Tab, но ошибки в эмуляторе нет. Размер Zip-файла не превышает 32 КБ, и я уверен, что файл принимается правильно. Вот мой код для распаковки
package com.vsi.vremote;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import android.content.Context;
import android.util.Log;
public class UnCompressor {
private static final String TAG = "UnCompressor";
Context context;
public UnCompressor(Context context) {
this.context = context;
}
private final void copyInputStream(InputStream in, OutputStream out)
throws IOException {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) >= 0)
out.write(buffer, 0, len);
in.close();
out.close();
}
public final String[] unCompress(String name) {
try {
Log.d(TAG, "Uncompress called");
ZipFile zipFile = new ZipFile(context.getFileStreamPath(name));
Log.d(TAG, "Zip file created");
Enumeration entries = zipFile.entries();
String fileNames[] = new String[zipFile.size()];
int counter = 0;
Log.d(TAG, "Loop strting");
while (entries.hasMoreElements()) {
Log.d(TAG, "Getting next entry");
ZipEntry entry = (ZipEntry) entries.nextElement();
Log.d(TAG, "Extracting file: " entry.getName());
copyInputStream(
zipFile.getInputStream(entry),
new BufferedOutputStream(context.openFileOutput(
entry.getName(), Context.MODE_PRIVATE)));
fileNames[counter ] = entry.getName();
}
zipFile.close();
return fileNames;
} catch (IOException ioe) {
System.err.println("Unhandled exception:");
ioe.printStackTrace();
return null;
}
}
public final void delete(String fileName) {
context.deleteFile(fileName);
}
}
Примечание: Я только что проверил это на своем HTC WildFire, он также работает на этом мобильном устройстве, но galaxy TAB : (
Ответ №1:
Это только добавление этих файлов в zip-файл (см. скриншот), Но я должен создать zip-файл из этих частей zip-файла. Я просто разделил свой zip-файл на части и загрузил на сервер. теперь я хочу загрузить эти файлы в мое приложение и перестроить zip-файл в приложение.