2011-01-16 2 views
0

나는 사용자가 "그래픽"노트를 작성할 수있는 응용 프로그램을 작성합니다. 비트 맵을 내 사용자 정의 ContentProvider에 저장하려고하면 문제가 발생합니다 (NotesProvider는 ContentProvider를 확장 함). Google devGuide에 따르면 openFile (Uri uri, String mode) 메소드를 대체해야합니다. 그리고 오류 : 파일을 찾을 수 없습니다. 이 문제를 조사하고 해결책을 얻으십시오 here. 그리고 내가 그렇게콘텐츠 프로 바이더 파일 저장 번호 해당하지 않는 파일이나 디렉토리

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { 
     if(sUriMatcher.match(uri)!=NOTE_ID) 
      throw new IllegalArgumentException("Unsupported open file on directori uri " +uri); 
     File root = new File(Environment.getDataDirectory(), 
      BITMAPS_PATH); 
     root.mkdirs(); 
     File path=new File(root, uri.getEncodedPath()); 
     int imode = 0; 
     if (mode.contains("w")) { 
      imode |= ParcelFileDescriptor.MODE_WRITE_ONLY; 
      if (!path.exists()) { 
       try { 
        path.createNewFile(); 
       } catch (IOException e) { 
        // TODO decide what to do about it, whom to notify... 
        e.printStackTrace(); 
       } 
      } 
     } 
     if (mode.contains("r")) imode |= ParcelFileDescriptor.MODE_READ_ONLY; 
     if (mode.contains("+")) imode |= ParcelFileDescriptor.MODE_APPEND; 

     return ParcelFileDescriptor.open(path, imode); 
} 

및 응용 프로그램처럼 내 표현을 구축는

12:42:12.714 2550 WARN System.err java.io.IOException: No such file or directory 

답변

0

IOException이 내가 여기에 비슷한 문제가 있었다. 에뮬레이터에서 Environment.getDataDirectory()에 해당하는 폴더가 존재하지 않으면 예외가 발생합니다. 터미널이나 adb를 통해 수동으로 (코드가 아닌) 폴더를 생성해야합니다. 일단 코드를 다시 실행하면 다시 작동합니다.

+0

정말 고마워요! 에뮬레이터에 존재하는 디렉토리가 있지만 문제가 uri.getEncodedPath() 파일 이름 일뿐만 아니라,이 수정 프로그램으로 내 코드를 변경하고 작동합니다. – Kirill

관련 문제