java-uri字符串不能在android中缓存

问题描述

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

解决方案

photo 的值是确定的,

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

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

解决方案二:

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 中存储捕捉的图像。

时间: 2024-11-29 08:16:58

java-uri字符串不能在android中缓存的相关文章

java 判断字符串是否在list中

问题描述 做一个明细表中的新建.修改与删除的功能,该明细表新建后需要维护,可能新建数据或删除数据,假如现在得到界面传回的数据ID是:1.2.25.46:先得到数据库这条主表数据的ID下所有的数据信息如下,放在list中:得到SQL数据为:1.25.46,通过下列语句得到后放到list中List<Rkmx> listRkMX = rkdMXDAO.GetRKMXInfo(" where pz_id=" + pz_id); 知道多了一条ID为2的数据,这个怎么进行循环比对 解决

直接应用项目中的Android图片缓存技术_Android

前不久搞的Android图片缓存,刚开始引入开源的框架,用着还行,但是在开发中遇到问题,就比如universal-image-loader-1.9.5.jar这个框架吧,在加载图片的时候自定义imageview无法加载,可能是存在以下问题吧,况且导入框架导致开发的项目包越来越大,基于上面的这几种情况,于是我就想自己写一个图片三级缓存的工具. 简要分析:刚开始想,图片的加载显示无非是先检查内存里面有没有,没就去文件里面找,若是文件里面没有的话就去开启网络下载,这样也符合开发中的大部分需求,而且效率

直接应用项目中的Android图片缓存技术

前不久搞的Android图片缓存,刚开始引入开源的框架,用着还行,但是在开发中遇到问题,就比如universal-image-loader-1.9.5.jar这个框架吧,在加载图片的时候自定义imageview无法加载,可能是存在以下问题吧,况且导入框架导致开发的项目包越来越大,基于上面的这几种情况,于是我就想自己写一个图片三级缓存的工具. 简要分析:刚开始想,图片的加载显示无非是先检查内存里面有没有,没就去文件里面找,若是文件里面没有的话就去开启网络下载,这样也符合开发中的大部分需求,而且效率

Android中加载网络资源时的优化缓存和异步机制

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: public class MemoryCache { private static final String TAG = "MemoryCa

Android中如何加载数据缓存_Android

最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 首先做一个保存缓存的工具类 import java.io.File; import java.io.IOException; import android.content.Context; import android.os.Environment; import android.util.Log; /** * 缓存工具类 */ public class Co

Android 中的 Effective Java(速查表)

本文讲的是Android 中的 Effective Java(速查表), Effective Java 是一本被广泛认可的著作,它指明了在写 Java 代码时兼顾可维护性与效率的方式.Android 也是使用 Java 来开发的,这意味着前书中的所有建议仍旧可用,真的是这样吗?并不尽然.某些同学 认为书中的"大部分"建议都不适用于 Android 开发,但我认为并不是这样.我承认书中的部分建议确实不适用,因为并非所有 Java 特性都有针对 Android 优化(比如说枚举,序列化等等

【我的Android进阶之旅】Android Studio如何轻松整理字符串到string.xml中

使用Android Studio一段时间了,还有很多小技巧没有掌握.比如:平常将字符串整理到string.xml中,都是手动的去复制字符串到string.xml中,然后再回来修改引用该字符串的代码,这样很low.今天发现了一个小技巧可以轻松整理字符串到string.xml中,在这里分享出来. 1.在布局文件中写的字符串,整理到string.xml中 1.如下面的布局文件,一般写布局文件的时候都是直接把字符串写到里面,之后再整理到string.xml中: <TextView android:lay

Android中图片的三级缓存机制_Android

我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存缓存中,缓存到强引用中 也就是LruCache中.如果强引用中空间不足,就会将较早存储的图片对象驱逐到软引用(softReference)中存储,然后将图片缓存到文件(内部存储外部存储)中:读取图片的时候,先读取内存缓存,判断强引用中是否存在图片,如果强引用中存在,则直接读取,如果强引用中不存在,则

Android中的Bitmap缓存池使用详解_Android

本文介绍了如何使用缓存来提高UI的载入输入和滑动的流畅性.使用内存缓存.使用磁盘缓存.处理配置改变事件等方法将会有效的解决这个问题. 在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片). 在这些控件中,当一个子控件不显示的时候,系统会重用该控件来循环显示 以便减少对内存的消耗.同时垃圾回收机