2011-04-12 4 views
0

에뮬레이터에서 절대적으로 올바르게 실행되는 코드가 있지만 삼성 갤럭시 탭에서 실행할 때 예외가 발생합니다.
소켓을 통해 서버에서 하나의 압축 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 산불에 체크, 또한이 이동하지만 갤럭시 탭 :(

답변

0

아마도이 Central Directory Entry not found (ZipException) 관련이 있는지 확인하고 있는지에 노력하고 있습니다 답변이 도움이

+0

문제가 해결되었습니다.이 파일을 서버에서 받고 SD 카드에 저장했습니다. 제대로받지 못했습니다. SD 카드에 쓰는 동안 잘못된 논리가있었습니다. 그래서 ZIP 예외가 발생했습니다. –

0

enter image description here

그 부분으로 만 내가 그 zip 파일의 부분에서 zip 파일을해야하지만, zip 파일 (참조 screenshow)로 그 파일을 추가. 나는 단순히 나누어 내 zip 파일 및 에 업로드 서버. 지금은 내 응용 프로그램에서 이러한 파일을 다운로드하고 응용 프로그램에 zip 파일을 다시 작성하고 싶습니다.

관련 문제