2013-09-04 12 views
10

Mam aplikację canvas. Próbuję utworzyć aplikację do podpisu pod numerem Canvas + onTouchListener.Zapisywanie kanwy Androida zawsze java.io.IOException: open failed: ENOENT (brak takiego pliku lub katalogu)

To jest moja metoda oszczędzania, gdzie staram się zapisać podpis do obrazka:

private void save() { 
    hideMenuBar(); 
    View content = this; 
    content.setDrawingCacheEnabled(true); 
    content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
    Bitmap bitmap = content.getDrawingCache(); 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    String imgPath = path+"/imotax/capture/spop/ttd/image" + "temp" + ".jpg"; 
    File file = new File(imgPath); 
    FileOutputStream ostream; 
    try { 
     file.createNewFile(); 
     ostream = new FileOutputStream(file); 
     bitmap.compress(CompressFormat.JPEG, 100, ostream); 
     ostream.flush(); 
     ostream.close(); 
     Toast.makeText(getContext(), "image saved", 5000).show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.i("ttd", e.toString()); 
     Toast.makeText(getContext(), "Failed To Save", 5000).show(); 
     showMenuBar(); 
    } 
} 

Nie wiem dlaczego, ale zawsze błędy lub wpłynięcia oświadczenia catch z tego błędu:

java.io.IOException: open failed: ENOENT (No such file or directory) 

Odpowiedz

12

Spróbuj w ten sposób

private void save() { 
     try { 
      hideMenuBar(); 
      View content = this; 
      content.setDrawingCacheEnabled(true); 
      content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
      Bitmap bitmap = content.getDrawingCache(); 

      String extr = Environment.getExternalStorageDirectory().toString(); 
      File mFolder = new File(extr + "/imotax/capture/spop/ttd/image"); 
      if (!mFolder.exists()) { 
       mFolder.mkdir(); 
      } 

      String s = "tmp.png"; 

      File f = new File(mFolder.getAbsolutePath(), s); 

      FileOutputStream fos = null; 
      fos = new FileOutputStream(f); 
      bitmap.compress(CompressFormat.JPEG, 100, fos); 
      fos.flush(); 
      fos.close(); 

      bitmap.recycle(); 

      Toast.makeText(getContext(), "image saved", 5000).show(); 
     } catch (Exception e) { 
      Toast.makeText(getContext(), "Failed To Save", 5000).show(); 
     } 
    } 

UPDATE

File mFolder = new File(extr + "/imotax/capture/spop/ttd/image"); //replace with 

File mFolder = new File(extr + "/imotax"); 
+0

przepraszam bracie, wciąż błędzie :(sam błąd – yozawiratama

+0

uruchomione na urządzeniu lub emulatorze –

+0

urządzenie to jest błąd: 09-04: 12: 28: 07,863: I/TTD (16524): Java. io.FileNotFoundException: /storage/sdcard0/imotax/capture/spop/ttd/image/tmp.png: open failed: ENOENT (Brak takiego pliku lub katalogu) – yozawiratama

9
Add this permissions in manifest. 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+7

Według przewodników po Google, pisanie na piśmie oznacza także przeczytanie, więc nie powinno być potrzeby deklarowania obu tych stron. camera/photobasics.html –

0

promlem że pominięcia "/" pomiędzy sdcard i

storage/sdcard0/imotax/capture/spop/ttd/image/tmp.png 
should be 
storage/sdcard/0/imotax/capture/spop/ttd/image/tmp.png 
0

nie pytaj mnie dlaczego, ale to wydaje się być problem z prawami dostępu. Spróbuj użyć jakiegoś publicznego katalogu. Korzystanie coś takiego:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)