2011-10-12 75 views
0

我一直得到一個FileNotFoundException異常/ IOException異常,自定義內容提供商 - 保存圖像

File directory = new File(Environment.getExternalStorageDirectory() 
      .toString() 
      + "/Android/data/<package>"); 

    if (!directory.exists()) { 
     boolean x = directory.mkdirs(); 
     Log.d(TAG, "directory: " + x); 
    } 

    File path = new File(directory.getPath() , uri.getEncodedPath()); 


    int imode = 0; 
    if (mode.contains("w")) { 
     imode |= ParcelFileDescriptor.MODE_READ_WRITE; 
     if (!path.exists()) { 

      try { 

      path.createNewFile(); 



      } catch (IOException e) { 

       e.printStackTrace(); 
       Log.d(TAG, "Error " + e.getMessage()); 

      } 
     } 
    } 
    if (mode.contains("r")) 
     imode |= ParcelFileDescriptor.MODE_READ_ONLY; 
    if (mode.contains("+")) 
     imode |= ParcelFileDescriptor.MODE_APPEND; 

    return ParcelFileDescriptor.open(path, imode); 

唯一的例外是

10-12 15:01:10.360: WARN/System.err(18679): java.io.IOException: No such file or directory 

10-12 15:01:10.360:WARN/System.err的( 18679):在java.io.File.createNewFileImpl(Native Method) 10-12 15:01:10.360:WARN/System.err(18679):位於java.io.File.createNewFile(File.java:1115) 10-12 15:01:10.360:WARN/System.err(18679):at com.hair.android.camera.ImageContentProvider.openFile(ImageContentProvider。 java:230) 10-12 15:01:10.360:WARN/System.err(18679):at android.content.ContentProvider.openAssetFile(ContentProvider.java:726) 10-12 15:01:10.360:WARN/System.err(18679):at android.content.ContentProvider $ Transport.openAssetFile(ContentProvider.java:247) 10-12 15:01:10.360:WARN/System.err(18679):at android.content.ContentResolver。 openAssetFileDescriptor(ContentResolver.java:534) 10-12 15:01:10.360:WARN/System.err(18679):at android.content.ContentResolver.openOutputStream(ContentResolver.java:402) 10-12 15:01: 10.360:WARN/System.err(18679):at android.content.ContentResolver.openOutputStream(ContentResolver.java:378) 10-12 15:01:10.360:WARN/System.err(18679):at com.hair。 android.HairAppActivity.onActivityResult(HairAppActivity.java:428) 10-12 15:01:10.3 60:WARN/System.err(18679):at android.app.Activity.dispatchActivityResult(Activity.java:4541) 10-12 15:01:10.360:WARN/System.err(18679):at android.app。 ActivityThread.deliverResults(ActivityThread.java:2740) 10-12 15:01:10.360:WARN/System.err(18679):at android.app.ActivityThread.handleSendResult(ActivityThread.java:2787) 10-12 15: 01:10.360:WARN/System.err(18679):at android.app.ActivityThread.access $ 2000(ActivityThread.java:122) 10-12 15:01:10.360:WARN/System.err(18679):at android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1032) 10-12 15:01:10.360:WARN/System.err(18679):at android.os.Handler.dispatchMessage(Handler.java:99) 10-12 15:01:10.360:WARN/System.err(18679):at android.os.Looper.loop(Looper.java:132) 10-12 15:01:10.360:WARN/Syst em.err(18679):at android.app.ActivityThread.main(ActivityThread.java:4025) 10-12 15:01:10.360:WARN/System.err(18679):at java.lang.reflect.Method。 invokeNative(Native Method) 10-12 15:01:10.360:WARN/System.err(18679):at java.lang.reflect.Method.invoke(Method.java:491) 10-12 15:01:10.360 :WARN/System.err(18679):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841) 10-12 15:01:10.360:WARN/System.err(18679):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 10-12 15:01:10.360:WARN/System.err(18679):at dalvik.system.NativeStart.main(Native Method)

任何想法我可以解決這個問題?在此先感謝

回答

0
new File(Environment.getExternalStorageDirectory() 
      .toString() 

這不正確 - 使用Environment.getExternalStorageDirectory()getAbsolutePath()

+0

想你的建議 - 新的文件(Environment.getExternalStorageDirectory()getAbsolutePath()+ ...同樣的問題。有沒有人有一個工作的例子? – William

+0

試試這個代碼http://www.stealthcopter.com/blog/2010/01/android-saving-a-sound-file-to-sd-from-resource-and-setting-as -ringtone /然後使用Uri.fromFile(new File(Environment.getExternalStorageDirectory(), 「your_file_name」))) – Yahor10