2013-04-20 69 views
0

我試圖將之前拍攝的圖像保存到不同的文件夾(該文件夾已存在)。我的清單是最新的,我需要的權限,我知道我需要沿該線使用的東西:Android將圖像保存到新文件夾

MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription); 

以下是我的代碼。我做錯了什麼,它不會保存?謝謝!

save.setOnClickListener(新View.OnClickListener(){

@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 

int id = viewIt.getId(); 

String root = Environment.getExternalStorageDirectory().toString(); 
String myDir = new String(root + "/New Directory/Folder 1/"); 
String description = ""; 
String filestring = arrPath[id];   
try { 
    MediaStore.Images.Media.insertImage(getContentResolver(), myDir, filestring, description); 
    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
    Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

    Toast.makeText(getApplicationContext(), "Save Successful", Toast.LENGTH_SHORT).show();   


    } 
}); 

下面是我的logcat錯誤:

04-20 17:38:03.763: E/AndroidRuntime(1003): FATAL EXCEPTION: main 
04-20 17:38:03.763: E/AndroidRuntime(1003): java.lang.NullPointerException 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:551) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at com.test.Import$ImageAdapter$2$4$1.onClick(Import.java:339) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.view.View.performClick(View.java:2485) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.view.View$PerformClick.run(View.java:9080) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.os.Handler.handleCallback(Handler.java:587) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.os.Looper.loop(Looper.java:123) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-20 17:38:03.763: E/AndroidRuntime(1003):  at dalvik.system.NativeStart.main(Native Method) 

回答

-1

我想通了!我決定走一條不同的路線,只是重命名文件。我意識到我不想要多個相同的圖像(試圖節省SD卡空間),所以我做了這個,而不是:

int id = viewIt.getId(); 

File sdcard = Environment.getExternalStorageDirectory(); 
File sdddcard = new File(sdcard + "/New Directory/Folder 1/"); 

File from = new File(arrPath[id]); 


Random generator = new Random(); 
int n = 10000; 
n = generator.nextInt(n); 
String filename = "ImageImport-"+ n +".jpg"; 

File to = new File(sdddcard,filename); 

from.renameTo(to); 
+0

爲什麼會得到反對票?這對我有效。如果你有更好的答案,我很樂意開悟。 – BossWalrus 2013-06-04 02:39:51

0

1)空間的文件夾名稱可能有一些問題,所以一定要確保你檢查文件夾是否存在,否則創建它。

File file = new File(myDirPath); 
if(!file.exists()) { 
    if(!file.mkdirs()){ 
    Log.e("TAG", "Error: You can't create folder"); 
    } 
} 

2)有可能是一個錯誤,但你沒有看到它,因爲你捕獲異常但不打印它。

嘗試更換此

e.printStackTrace(); 

Log.e("TAG", "Error: "+ e.toString());

+0

謝謝!我現在看到一個錯誤。它告訴我,我的行:MediaStore.Images.Media.insertImage(getContentResolver(),myDir,filestring,description);是問題。任何想法,我怎麼格式化它錯了? – BossWalrus 2013-04-20 17:44:53

+0

錯誤報告對該行有何評論? – kabuto178 2013-04-20 18:19:28

+0

04-20 17:38:03.763 E/AndroidRuntime(1003):致命異常:主 04-20 17:38:03.763:E/AndroidRuntime(1003):java.lang.NullPointerException 04-20 17:38 :03.763:E/AndroidRuntime(1003):\t at android.provider.MediaStore $ Images $ Media.insertImage(MediaStore.java:551) – BossWalrus 2013-04-20 18:41:33

相關問題