2016-04-15 34 views
1

以下はMainActivity.javaのコードです。 トーストによるエラーはディレクトリの作成中です。
ON
はマウントまたはReadMode
WRITEMODE:
mkdir()または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"/>許可が追加された

<?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> 

トースト出力ディレクトリの作成、存在しないこと、私はMKDIR()とmkdirs()

+0

'void storeCameraPhotoInSDCard'。 mkdirsが失敗した直後に 'boolean storeCameraPhotoInSDCard'を作成し、' return false; 'を追加してください。ディレクトリが存在しない場合でも、コードを盲目的に使用し続けることになります。 – greenapps

+0

'isExternalStorageReadable(); isExternalStorageWritable(); '。 Yuは両方の関数を呼び出していますが、結果は何もしません。それらを1つずつ呼び出す必要があり、falseを返す場合はfalseを返します。コードを続けるのは意味をなさないためです。 – greenapps

+0

'Uri imageUri = Uri.fromFile(outputFile); Uri selectedImage = imageUri; Toast.makeText(MainActivity.this、selectedImage.toString()、Toast.LENGTH_LONG).show(); '。これらの行をすべて削除し、outputFileを直接使用してトーストする。 – greenapps

答えて

1


私はAndroid 6.0でコンパイルしていました。ユーザーに許可を与える必要があります。 したがって、次のコードを挿入して、ユーザーがアプリのアクセス権を許可しているかどうかを確認する必要があります。ユーザーが読み取りと書き込みの権限を与えた場合、マニフェストは更新され、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

このコードは私

  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(); 
      } 
のために働くの両方を使用してみました、ディレクトリMKDIR

を作成するには - エラー //エラーに失敗しました

+0

ブール値= appDirectory.mkdirs(); if(成功){ Toast.makeText(MainActivity.this "Directory Created"、Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this "Failed-Error"、Toast.LENGTH_SHORT).show();} Falied -Errorを表示します。 – SupposeXYZ

+0

ディレクトリが既に存在する場合に失敗するため、ディレクトリが存在するかどうかを確認しましたか? – androidLover

+0

はい私はチェックしましたが、ディレクトリ名CountDotsAppImagesは/ storage/emulated/0 /に作成されていません。 – SupposeXYZ

0

ディレクトリを追加する場合は、この方法を使用できます。

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()); 

     } 

ディレクトリ(dir)を作成した後、ファイルの作成に使用できます。

関連する問題