2011-01-16 4 views
0

私は "グラフィック"ノートを作ることができるアプリケーションをビルドします。 Bitmapをカスタム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); 
} 

とアプリケーションのIOException

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

答えて

0

を持っているように、私の表現を構築それから私はこれと同様の問題がありました。エミュレータで、Environment.getDataDirectory()に対応するフォルダが存在しない場合、例外が発生します。ターミナルかadbのどちらかを使用して、まずコードではなくフォルダを手動で作成する必要があります。一度それを行うと、あなたのコードをもう一度実行してみるとうまくいくはずです。

+0

ありがとうございました!エミュレータ上にディレクトリが存在しましたが、uri.getEncodedPath()にファイル名だけでなく、この修正でコードを変更しても問題はありませんでした。 – Kirill

関連する問題