2016-04-15 10 views
1

Unten ist mein Code für MainActivity.java. Der Fehler laut toasts liegt im Erstellen des Verzeichnisses.Verzeichnis erstellt nicht mit mkdir() oder mkdirs()

MainActivity.java

@Override 
protected void onActivityResult(int requestcode,int resultcode,Intent data){ 
    super.onActivityResult(requestcode,resultcode,data); 
    if (requestcode == TAKE_PICTURE) 
     { 
     if(resultcode== Activity.RESULT_OK){ 

      ImageView imageHolder = (ImageView)findViewById(R.id.image_camera); 
      Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 

      String partFilename = currentDateFormat(); 
      storeCameraPhotoInSDCard(bitmap, partFilename); 

      // display the image from SD Card to ImageView Control 
      String storeFilename = "photo_" + partFilename + ".jpg"; 
      Bitmap mBitmap = getImageFileFromSDCard(storeFilename); 
      imageHolder.setImageBitmap(mBitmap); 
     } 
     } 
} 

    private String currentDateFormat(){ 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HH_mm_ss"); 
     String currentTimeStamp = dateFormat.format(new Date(0)); 
     return currentTimeStamp; 
    } 
    /* Checks if external storage is available for read and write */ 
    public boolean isExternalStorageWritable() { 
     String state = Environment.getExternalStorageState(); 
     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      Toast.makeText(MainActivity.this, "WriteMode ON", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     Toast.makeText(MainActivity.this, "WriteMode OFF", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    /* Checks if external storage is available to at least read */ 
    public boolean isExternalStorageReadable() { 
     String state = Environment.getExternalStorageState(); 
     if (Environment.MEDIA_MOUNTED.equals(state) || 
      Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      Toast.makeText(MainActivity.this, "Mounted or ReadMode", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     Toast.makeText(MainActivity.this, "no-Mounted or no-ReadMode", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    private void storeCameraPhotoInSDCard(Bitmap bitmap, String currentDate){ 
     boolean isAvailable=isExternalStorageWritable(); 
     if(isAvailable){ 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG,90, bytes); 
      String imgUri = "photo_" + currentDate + ".jpg"; 
      File appDirectory = new File(Environment.getExternalStorageDirectory(),"CountDotsAppImages"); 
      boolean success = appDirectory.mkdirs(); 
      if (success) { 
       Toast.makeText(MainActivity.this, "Directory Created", Toast.LENGTH_SHORT).show(); 

      } else { 
       Toast.makeText(MainActivity.this, "Failed - Error", Toast.LENGTH_SHORT).show(); 
      } 
      File destination = new File(Environment.getExternalStorageDirectory(),"CountDotsAppImages/"+imgUri); 
      FileOutputStream fo; 
      try { 
       destination.createNewFile(); 
       fo = new FileOutputStream(destination); 
       fo.write(bytes.toByteArray()); 
       fo.close(); 
      } 
     catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 

    private Bitmap getImageFileFromSDCard(String filename){ 
    File storageDir = new File(Environment.getExternalStorageDirectory() + "/", "CountDotsAppImages"); 

     Bitmap bitmap = null; 
     File imageFile = new File(storageDir.getPath()+File.separator + filename); 
     try { 
      FileInputStream fis = new FileInputStream(imageFile); 
      Toast.makeText(MainActivity.this, imageFile.toString() , Toast.LENGTH_LONG).show(); 
      bitmap = BitmapFactory.decodeStream(fis); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> Berechtigung hinzugefügt wird

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.countdots" 
    android:versionCode="1" 
    android:versionName="1.0" android:installLocation="auto"> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="23" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Toasts Output:
Mounted oder ReadMode
Writemode ON
Verzeichnis ist nicht vorhanden, erstellen
fehlgeschlagen -Fehler // Fehler bei der Erstellung Verzeichnis mkdir

Ich habe versucht, sowohl mkdir() und mkdirs mit()

+0

'void storeCameraPhotoInSDCard'. Machen Sie das 'boolean storeCameraPhotoInSDCard' und fügen Sie' return false; 'direkt nach dem Ausfall von mkdirs hinzu. Sie verwenden blindlings Ihren Code, um ein Verzeichnis zu verwenden, auch wenn das nicht existiert. – greenapps

+0

'isExternalStorageReadable(); isExternalStorageWritable(); '. Yu ruft beide Funktionen auf, tut aber nichts mit dem Ergebnis. Sie sollten sie nacheinander aufrufen und direkt false zurückgeben, wenn sie false zurückgeben, da es keinen Sinn ergibt, mit dem Code fortzufahren. – greenapps

+0

'Uri imageUri = Uri.fromFile (Ausgabedatei); Uri selectedImage = imageUri; Toast.makeText (MainActivity.this, selectedImage.toString(), Toast.LENGTH_LONG) .show(); '. Entfernen Sie alle diese Zeilen und ersetzen Sie sie durch einen Toast mit outputFile direkt. – greenapps

Antwort

1

Ich habe es herausgefunden.
Als ich kompilierte mit Android 6.0. Es erfordert, dass der Benutzer die Berechtigung erteilt. So sollte der folgende Code eingefügt und überprüft werden, ob der Benutzer App-Berechtigung gewährt oder nicht. Dann, wenn der Benutzer die Genehmigung zum Lesen und Schreiben von Manifest erteilt wird aktualisiert und volia !!!

if (Build.VERSION.SDK_INT >= 23) { 
      if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) { 
       ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE}, 
         1); 
      } else { 
       //do something 
      } 
     } else { 
       //do something 
     } 
0

Dieser Code funktioniert für mich

  try{ 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG,90, bytes); 
       imgUri = "photo_" + System.currentTimeMillis() + ".jpg"; 
       File appDirectory = new File(Environment.getExternalStorageDirectory(),"CountDotsAppImages"); 
       appDirectory.mkdirs(); 
       File destination = new File(Environment.getExternalStorageDirectory(),"CountDotsAppImages/"+imgUri); 
       FileOutputStream fo; 
       try { 
        destination.createNewFile(); 
        fo = new FileOutputStream(destination); 
        fo.write(bytes.toByteArray()); 
        fo.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
+0

Boolescher Erfolg = appDirectory.mkdirs(); if (Erfolg) { Toast.makeText (MainActivity.this, "Verzeichnis erstellt", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText (MainActivity.this, "Fehlgeschlagen - Fehler", Toast.LENGTH_SHORT) .show();} Es zeigt Falied-Error. – SupposeXYZ

+0

haben Sie überprüft, ob das Verzeichnis existiert, weil es fehlschlägt, wenn das Verzeichnis bereits existiert? – androidLover

+0

Ja, ich habe überprüft, kein Verzeichnisname CountDotsAppImages wird in/storage/emulated/0/erstellt. – SupposeXYZ

0

Zum Hinzufügen von Verzeichnis können Sie diese Methode verwenden.

isAvailable=ExternalStorageChecker.isExternalStorageWritable(); 
     if(isAvailable){ 

      dir = new File(myContext.getExternalFilesDir(null), newAlbumDir.getText().toString().trim()); 
      if(!dir.mkdirs()){ 
       Log.e("++++++","Directoy Already Exist"); 
       Log.e("External Directory Path","++++"+dir.getAbsolutePath()); 

      } 
      else{ 
       Log.e("++++","Directory Created"); 
       Toast.makeText(myContext,"File Created on External",Toast.LENGTH_SHORT).show(); 
       Log.e("Externa Directory Path","++++"+dir.getAbsolutePath()); 
       } 
     } 
     else{ 
      Toast.makeText(myContext,"File Created on Internal",Toast.LENGTH_SHORT).show(); 

      Log.e("Internal Directory Path","++++"+myContext.getFilesDir().getPath()); 
      dir=new File(myContext.getFilesDir(),newAlbumDir.getText().toString()); 

     } 

Nach dem Erstellen des Verzeichnisses (dir) können Sie die Datei erstellen.

Verwandte Themen