2015-04-23 4 views
0

Я пытаюсь добавить растровое изображение в свой каталог. Он сохраняет изображение, но я получаю эту странную ошибку, которая написана синим цветом.Android: Почему я получаю эту ошибку?

ample.myapplication W/System.err﹕ java.io.FileNotFoundException: /CameraApp: open failed: EROFS (Read-only file system) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:128) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:117) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at com.example.myapplication.MainActivity.save_btn(MainActivity.java:119) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.view.View$1.onClick(View.java:3825) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.view.View.performClick(View.java:4445) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.view.View$PerformClick.run(View.java:18446) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:136) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5146) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EROFS (Read-only file system) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at libcore.io.Posix.open(Native Method) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:393) 
04-23 17:07:26.259 12120-12120/com.example.myapplication W/System.err﹕ ... 18 more 

Это код, который он использует для сохранения растрового изображения. При нажатии кнопки save_btn выполняется этот код.

public void save_btn(View v) { 
     FileOutputStream out = null; 
     try { 
      out = new FileOutputStream(filename); 
      image.compress(Bitmap.CompressFormat.PNG, 100, out); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (out != null) { 
        out.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 

      } 

      AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
      alertDialog.setTitle("Saved"); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }); 
      alertDialog.show(); 
     } 
    } 

Намерение камеры

public void capture_btn(View v) { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image.jpg"); 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
     startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
    } 
+5

Проверьте, добавили ли вы в свой манифест . – TdSoft

+0

переустановите его и убедитесь, что этот растровый каталог, содержащий каталог, не открывается ни в каком другом проводнике. то есть лучше закрыть все приложения и переустановить их. – codevscolor

+0

Да, мой манифест имеет это разрешение. – smither123

ответ

1

Попробуйте использовать этот фрагмент кода:

public static final int MEDIA_TYPE_IMAGE = 1; 
public static final int MEDIA_TYPE_VIDEO = 2; 

/** Create a File for saving an image or video */ 
public static File getOutputMediaFile(int type){ 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_PICTURES), "App"); 
    // This locat ion works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      android.util.Log.d("log", "failed to create directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE){ 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_"+ "IdelityPhotoTemp" + ".png"); 
    } else if(type == MEDIA_TYPE_VIDEO) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "VID_"+ "idelityVideoTemp" + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

И потом:

try { 
    File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
    if (pictureFile == null){ 
     android.util.Log.d("log", "Error creating media file, check storage permissions"); 
     return null; 
    } 

    FileOutputStream fos = new FileOutputStream(pictureFile); 
    fos.write(photoData); 
    fos.close(); 

} catch (FileNotFoundException e) { 
    android.util.Log.d("log", "File not found: " + e.getMessage()); 
} catch (IOException e) { 
    android.util.Log.d("log", "Error accessing file: " + e.getMessage()); 
} 

В случае, если вы используете Int от камеры, вы можете использовать этот подход в следующем link

+0

Спасибо, все выглядит хорошо из этих двух ошибок. http://i.imgur.com/t7mRvoB.png Извините, я довольно новичок в Java. Может ли кто-нибудь помочь мне решить их? – smither123

+0

Конечно! просто нужно обернуть его в попытку поймать, я собираюсь добавить его к ответу – MiguelHincapieC

+0

Спасибо! все ошибки исчезли. Что я здесь помещаю «fos.write (photoData)»; ? – smither123

Смежные вопросы