2 markdowneide markdowneide 于 2013.06.08 09:42 提问

uri字符串不能在android中缓存

我使用的下面的代码

String fileName = "image" + "_" + title.getText().toString()+"_" + val.toString(); 
                    photo = this.createFile(fileName, ".jpg");
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
                    uriOfPhoto = Uri.fromFile(photo);
                    startActivityForResult(intent, RESULT_CAMERA_SELECT);
                }
            }
            catch(Exception e)
            {
                Log.v("Error", "Can't create file to take picture!");
                displayAlert("Can't create file to take picture!","SDCard Error!");
            }
        }

        private File createFile(String part, String ext) throws Exception
        {
            File tempDir = new File (Environment.getExternalStorageDirectory() + "/MyFolder/Images");
            if(!tempDir.exists())
            {
                tempDir.mkdir();
            }
            tempDir.canWrite();
            return new File(tempDir, part+ext);
        }
    });

UriOfPhoto 给出提示uriString not chached in debug。它不是存储文件中的uri。如何解决这个问题呢?

authority   Uri$Part$EmptyPart  (id=830004244032)   
fragment    Uri$Part$EmptyPart  (id=830004245408)   
host    "NOT CACHED" (id=830003914304)  
path    Uri$PathPart  (id=830067926736) 
port    -2  
query   Uri$Part$EmptyPart  (id=830004245408)   
scheme  "file" (id=830002660688)    
ssp null    
uriString   "NOT CACHED" (id=830003914304)  
userInfo    null 

2个回答

luhuajcdd
luhuajcdd   2013.06.08 10:12
已采纳

photo 的值是确定的,

photo = this.createFile(fileName, ".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
uriOfPhoto = Uri.fromFile(photo);

为什么还在这里实例化uriOfPhoto, 有点多余。 在用到的时候在实例化

LiDaming_and
LiDaming_and   2013.06.08 11:38
String fileName = Environment.getExternalStorageDirectory() + "/MyFolder/Images" + fileName + ".jpg";
UriOfPhoto = Uri.parse(fileName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(MediaStore.EXTRA_OUTPUT,  UriOfPhoto);
startActivityForResult(intent, RESULT_CAMERA_SELECT);

不需要创建文件来存储照片,你只需要传递 uri,它里面的照片必须是像android系统创建的文件一样,然后在 uri 中存储捕捉的图像。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!