에뮬레이터에서 절대적으로 올바르게 실행되는 코드가 있지만 삼성 갤럭시 탭에서 실행할 때 예외가 발생합니다.
소켓을 통해 서버에서 하나의 압축 zip 파일을 받고 있는데이 압축을 풀고 있습니다. 2 개 또는 3 개의 텍스트 파일을 압축하여 보내면 에뮬레이터와 Galaxy Tab 모두에서 정상적으로 실행됩니다.
그러나 텍스트 또는 두 개의 이미지 파일이있는 작은 이미지 파일을 압축하여 보내면 다음과 같이됩니다.> java.util.zip.ZipException : 중앙 디렉토리 항목을 찾을 수 없습니다. 갤럭시 탭에 <이 표시되지만 에뮬레이터에는 오류가 없습니다. Zip 파일 크기가 32KB를 초과하지 않으며 파일이 올바르게 수신되고 있습니다. 여기 내 uncompressor 코드java.util.zip.ZipException : 중앙 디렉토리 항목을 찾을 수 없습니다.
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 산불에 체크, 또한이 이동하지만 갤럭시 탭 :(
문제가 해결되었습니다.이 파일을 서버에서 받고 SD 카드에 저장했습니다. 제대로받지 못했습니다. SD 카드에 쓰는 동안 잘못된 논리가있었습니다. 그래서 ZIP 예외가 발생했습니다. –