【问题标题】:Save picture in specified folder将图片保存到指定文件夹
【发布时间】:2015-06-24 15:06:33
【问题描述】:

我可以通过我的代码将图片保存在我想要的文件夹中,但这还不够好,因为我的代码在我的文件夹中提供了图像的副本,在画廊 (DCIM) 中提供了另一个。

代码:

       Btngetdata.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, 2);
        }
    });
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        File a = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/");
        if (!a.exists()) {
            a.mkdirs();
        }
        if (requestCode == 2) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            ImageView test = (ImageView) findViewById(R.id.test);
            test.setImageBitmap(photo);
            try{
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
                String currentDateandTime = sdf.format(new Date()).replace(" ","");
                FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/splash/"+name+"/"+currentDateandTime+".jpg");
                photo.compress(Bitmap.CompressFormat.PNG, 100 , out);

                out.flush();
                out.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

我不能使用下面的代码或类似的东西。

       Btngetdata.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            f = new File(Environment.getExternalStorageDirectory().getPath() + "/tmp/"+"tmp.png");
            if (!f.exists()) {
                f.mkdirs();
            }
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
            startActivityForResult(cameraIntent, 2);
        }
    });

他们都在Logcat下面给我

04-17 20:41:24.974: E/AndroidRuntime(13913): FATAL EXCEPTION: main
04-17 20:41:24.974: E/AndroidRuntime(13913): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.example.sofrehkhane/com.sofrehKhane.slidingmenu.slidinglist.SingleItemView}: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913):    at     android.app.ActivityThread.deliverResults(ActivityThread.java:3462)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.ActivityThread.access$1100(ActivityThread.java:150)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.os.Looper.loop(Looper.java:213)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.ActivityThread.main(ActivityThread.java:5225)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at java.lang.reflect.Method.invoke(Method.java:525)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at dalvik.system.NativeStart.main(Native Method)
04-17 20:41:24.974: E/AndroidRuntime(13913): Caused by: java.lang.NullPointerException
04-17 20:41:24.974: E/AndroidRuntime(13913):    at com.sofrehKhane.slidingmenu.slidinglist.SingleItemView.onActivityResult(SingleItemView.java:102)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.Activity.dispatchActivityResult(Activity.java:5322)
04-17 20:41:24.974: E/AndroidRuntime(13913):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3458)
04-17 20:41:24.974: E/AndroidRuntime(13913):    ... 11 more

如果你能指导我解决问题,我会很高兴。

我想使用“setOnClickListener(new OnClickListener(){”作为按钮来拍摄照片并使用“public void onActivityResult(int requestCode, int resultCode, Intent data) {”来保存拍摄的照片。

更新: 通过使用这个link,我的应用获得了最佳答案和性能。

【问题讨论】:

  • com.sofrehKhane.slidingmenu.slidinglist.SingleItemView.onActivityResult(SingleItemView.java:102) 处出现 NullPointerException。请在该行周围发布代码。
  • @cygery 我编辑了问题并将代码放置为更新
  • 第 102 行是哪一行?
  • @cygery 对不起,第 102 行是“Bitmap photo = (Bitmap) data.getExtras().get("data");”
  • @cygery 正如您在 Logcat 中看到的那样,它说:失败交付结果 ResultInfo{who=null, request=2, result=0, data=null} where data=null

标签: android android-intent android-camera android-camera-intent save-image


【解决方案1】:

排队

Bitmap photo = (Bitmap) data.getExtras().get("data");

根据堆栈跟踪,datanull。 您必须在那里检查null 并采取相应措施。

另外,检查这个答案:https://stackoverflow.com/a/10779050/2367849

【讨论】:

  • 我用有效但不好的代码更新了问题。它为我提供了我想要的文件夹中的图片副本和图库中的另一个副本。
  • 据我所知,您无法阻止默认相机应用程序将图像保存到图库。不过,您也许可以将其从图库中删除。
  • 我会这样做,我已经测试了我在 stackoverflow 上找到的解决方案,但它不能解决这个问题。我已经 12 个小时在寻找可行的解决方案,但没有任何结果。
  • 我不知道您在搜索中使用了哪些术语,但搜索“android delete image from gallery”对我来说在第一个结果中显示了一个有希望的解决方案。
  • 好的,我终于从您分享的链接中找到了解决方案。我达到了这个答案,代码删除了图像。 stackoverflow.com/a/8166877/4620936
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多