2017-10-20 25 views
0

私のドロウアブルフォルダの下にpngファイルがあり、それを私の物理的なデバイスのいくつかのフォルダに保存します。画像をDrawableの下に保存する

私はすでに書き込み権限とすべてを持っていますが、いつも私が望むことをすることはできません。興味深いのは、画像を保存するのに10回試してみると、それは何とか2回、それ以上は管理していないということです。私はLG 3、アンドロイド5.0、API使用しています

21.私は昨日試したとき、私は私が画像を見たギャラリーを探していたとき、それは

私はまたに管理..しかし、今日の画像を保存していませんAPI 22とエミュレータで画像を保存しませんが、決してAPI 24

とこれがコードです:

ActivityCompat.requestPermissions(ShareActivity.this,new String[] {android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1); 

Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.instagram_logo); 

File path = Environment.getExternalStorageDirectory(); 


File dir = new File(path + "/savehere/"); 
if(!dir.exists()) 
{ 
    dir.mkdirs(); 
} 
else 
{ 
    Toast.makeText(mContext, "Directory already exists", Toast.LENGTH_SHORT).show(); 
} 


File file = new File(dir,"photo.png"); 

OutputStream out = null; 

try 
{ 
    out = new FileOutputStream(file); 
    image.compress(Bitmap.CompressFormat.PNG,80,out); 
    out.flush(); 
    out.close(); 

} 
catch (FileNotFoundException e) 
{ 
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
+0

'dir.mkdirs()から借り、それはディレクトリを作成するために失敗することがありますよう'戻り値を確認してください。そうであれば、ユーザーにトーストを表示して戻ります。存在しないディレクトリにファイルを置く場合は、続行することはあまり意味がありません。 – greenapps

+0

これらのキャッチブロックにToast()を入れて、あなたのアプリのユーザーにその例外について通知するようにします。 ...そしてあなたもあまりに... – greenapps

+1

「私はギャラリーを見ていましたが、私はイメージを見ました。ファイルが作成されているかどうかを確認するには、ギャラリーアプリを使用しないでください。完全に間違っている。ファイルエクスプローラアプリを使用して、そのディレクトリを調べる必要があります。 – greenapps

答えて

0

あなたがマニフェストに書き込み権限を持っていることを確認する必要があります。

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

外部記憶装置が利用可能であるかどうか、つまりSDカードであるかどうかを確認する必要があります。それを確認してください。

public boolean isExternalStorageWritable() { 
String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
    return true; 
    } 
    return false; 
} 

これが完了したら、実際にファイルを保存する場所を次の関数を使用して取得します。

String filename = "SampleFile.png"; 
String filepath = "MyFileStorage"; 
File myExternalFile = new File(getExternalFilesDir(filepath), filename); 
FileOutputStream fos = new FileOutputStream(myExternalFile); 
image.compress(Bitmap.CompressFormat.PNG,80,fos); 
out.flush(); 
out.close(); 

コードはAndroid External Storage – Read, Write, Save FileSaving Files Android Developer

+0

あなたの場合、myExternalFileとは何ですか? –

+0

@ConiSayns MyFileStorageというフォルダ内のSampleFile.txtというファイルへの参照を保持するFileオブジェクト、 –

+0

そして、inputTextはどうですか? @Jude –