如何使用共享首选项保存图像路径

2024-01-12

我有一个活动可以打开另一个活动来获取相机图库图片。图片返回到我原来的活动并停留在 imageView 中。效果很好。如何保存图像,以便当用户稍后返回或杀死应用程序时图像仍然存在。我知道我应该使用共享首选项来获取图像路径而不是保存图像本身,但我只是不知道该怎么做。

活动A

private ImageView im1;
private String selectedImagePath;
private static final int SELECT_PICTURE = 1;

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
    if (requestCode == SELECT_PICTURE) {
    Uri selectedImageUri = data.getData();
    selectedImagePath = getPath(selectedImageUri);
    System.out.println("Image Path : " + selectedImagePath);
    im1.setImageURI(selectedImageUri);
    }}}
public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
    };
   ((Button)dialogView.findViewById(R.id.button3))
   .setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
    }});

活动B

    Button send = (Button) findViewById(R.id.send);
    send.setOnClickListener(new OnClickListener() {
 public void onClick(View v) {              
            Intent intent=new Intent();
            setResult(RESULT_OK, intent);
            Bundle bundle=new Bundle();
            bundle.putInt("image",R.id.showImg);
            intent.putExtras(bundle);
            finish();

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (resultCode == RESULT_OK) {
         if (requestCode == SELECT_PICTURE) {
            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            System.out.println("Image Path : " + selectedImagePath);
            img.setImageURI(selectedImageUri);
        }}}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
    }

覆盖onPause()中的方法Activity用图像(来理解为什么onPause,在此处检查活动图的生命周期:http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Activity.html) 像这样:

@Override
protected void onPause() {
    SharedPrefrences sp = getSharedPreferences("AppSharedPref", 0); // Open SharedPreferences with name AppSharedPref
    Editor editor = sp.edit();
    editor.putString("ImagePath", selectedImagePath); // Store selectedImagePath with key "ImagePath". This key will be then used to retrieve data.         
    editor.commit();
    super.onPause();
}

这意味着每当这个Activity进入后台,图像路径将保存在SharedPreferences有名字AppSharedPref- 该名称可以是您喜欢的任何名称,但检索数据时需要使用相同的名称。

然后覆盖onResume()方法相同Activity这样你就可以检索图像路径Activity来到前台:

@Override
protected void onResume() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 0);
    selectedImagePath = settings.getString("ImagePath", "");
    super.onResume();
}

您可能还想尝试覆盖其他方法,例如onStart()根据图表,但这我留给你了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用共享首选项保存图像路径 的相关文章

随机推荐

  • 如何从layout.xml中删除默认的cardview边框

    我无法删除 CardView 的默认边框 以前有人遇到过这个问题吗 两条边界线重叠 CardviewDesign xml
  • 处理大量文本时防止内存问题

    我编写了一个程序 可以分析项目的源代码并根据代码报告各种问题和指标 为了分析源代码 我加载项目目录结构中存在的代码文件并从内存中分析代码 该代码在传递给其他方法进行进一步分析之前会经过大量处理 处理代码时 代码会传递给多个类 有一天 我在我
  • 谷歌地图dequeueBuffer:BufferQueue已被放弃

    我在使用 Google 地图小部件时遇到了一些问题 简而言之 我有 3 个页面 带有底部导航栏的主页 地图页面 脚手架主体中带有 GoogleMap 的基本状态小部件 以及另一个页面 每次我从地图页面切换得太快时 我都会收到此错误 并且整个
  • 视图、模型和 ViewModel 之间有哪些常见关系?

    我正在与设计师一起开发 Windows Phone 7 应用程序 我使用 XNA 进行了 C 开发 所以我了解 C 但不熟悉模型 视图 ViewModel 架构 我们的第一个破解是为任何给定视图激活多个 ViewModel 每个 ViewM
  • 即使 cpanm 声称它是最新的,也无法找到 perl 模块

    我尝试使用File Slurp module use v5 14 use warnings use File Slurp my text read file test txt 但是当我运行这个时 我收到错误 Can t locate Fil
  • SQL -> 关系代数

    假设我有以下关系 Branch branchNo PK street city postcode Staff staffNo PK fName lName sex branchNo FK 这对于这个问题来说并不重要 但是 PK 主键 FK
  • Xamarin 形成值转换器导致无限循环

    我试图获得一个使用转换器的简单双向绑定示例 但是一旦条目中的值发生变化 例如如果您输入 1 它就会陷入无限循环 它会到达 ConvertBack 方法的末尾并设置值正确 然后 它再次调用 ConvertBack 方法 除了这次的值是 11
  • SQL在两个表排列中向上或向下移动行

    我有两个以这种方式设计的表 并考虑到可能的元素重新排列 1 dbo test db 002 with columns id INT NOT NULL IDENTITY 1 1 PRIMARY KEY name NVARCHAR 255 an
  • 在 Go 代码中如何在超时时终止进程及其子进程?

    我遇到一种情况 我需要在一段时间后终止一个进程 我开始这个过程 然后 case lt time After timeout if err cmd Process Kill err nil return 0 fmt Errorf Failed
  • Markdown 中的语义标记

    我想使用简单的文本编辑器和 Markdown 做课堂笔记 有没有办法标记文本元素以使它们机器可读 例如 我想将某些单词和短语标记为 定义 然后 我可以运行某种脚本来显示单词及其相应的定义 我知道这已经过时了 但我刚刚开始接受 Markdow
  • 将命令行参数传递给 pip install

    我目前正在开发一个导入 Fortran 模块的 Python 项目 这setup py看起来与那个类似 from numpy distutils core import Extension from numpy distutils core
  • 在 JavaScript 中检测 Flash 对象点击

    有没有办法让 JavaScript jQuery 知道 Flash 对象何时被单击 并且仍然让 Flash 处理单击 我尝试将桌子放在物体顶部position fixed and a z index并将对象设置为param name wmo
  • 如何在iPhone上扩展键盘渐变?

    我发现很少有应用程序可以扩展键盘 但我想知道它们是如何做到的 这里有 2 个例子 文字学 http www textasticapp com images screenshot iphone5 png Prompt https pbs tw
  • Firefox 附加 RESTclient - 如何输入 POST 参数?

    我已经安装了 Firefox RESTclient 附加组件 但是我很难弄清楚如何传递 POST 参数 有特定的格式可以做到这一点吗 或者是否有其他工具可用于在 Mac OS X 上调试 REST API 如果您想提交 POST 请求 您必
  • 在 F# 中定义静态类

    是否可以在 F 中定义包含可重载成员的静态类 let模块绑定不能重载 即使它们被编译为静态类中的静态成员 type声明可以包含静态成员 但我不知道类型本身是否可以变为静态 我当前的解决方案是定义一个type使用私有构造函数并使用它 我想知道
  • 如何在非 NVIDIA 设置上加速深度学习?

    由于我只有 AMD A10 7850 APU 并且没有资金购买 800 1200 美元的 NVIDIA 显卡 因此我正在尝试利用我拥有的资源通过 TensorFlow Keras 加速深度学习 最初 我使用了 Tensorflow 的预编译
  • 使用 json.net 解析嵌套 json

    我的 json 反序列化有问题 下面是我的 json id ObjectId 56bc28c436b252c406a67f17 empname dhiraj empcode 123a level levelID 3 levelDescrip
  • 如何使用颜色图绘制 matplotlib 线图?

    如何使用 python matplotlib 创建线图 使得线条的颜色相对于另一个系列有所不同 举个简单的例子 import numpy as np import matplotlib pyplot as plt t np arange 0
  • 选择数据步骤中具有最大值的观测值

    Table old date 05DEC2016 a 28NOV2016 b 22DEC2016 c 23JAN2017 d 12JAN2017 e 09JAN2017 f 25DEC2016 g 我需要创建一个新表 data new se
  • 如何使用共享首选项保存图像路径

    我有一个活动可以打开另一个活动来获取相机图库图片 图片返回到我原来的活动并停留在 imageView 中 效果很好 如何保存图像 以便当用户稍后返回或杀死应用程序时图像仍然存在 我知道我应该使用共享首选项来获取图像路径而不是保存图像本身 但