clcurie_11 2013-07-31 03:37 采纳率: 6.7%
浏览 922

使用Shared Preferences如何把多幅图像保存在ImageView中?

在一个activity中有两个ImageViews,用户可以长按一个 ImageView ,就可以从 camera gallery 中选择获取任何图像。我想保存这些图像的路径,所以当用户再次打开或关闭程序时,图像仍在imageView中,这是为什么呢?

这是 imageView所在的Activity A :

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);};

    @Override
protected void onPause() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); // 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();
    }   

protected void onResume1() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1);
    selectedImagePath = sp.getString("ImagePath", "");
    super.onResume();
    }

Activity B 获取 cam gallery图片,然后发送到 Activity A

 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);
    }
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-09 16:46
    关注

    在 Activity A 中,你可以通过以下方式在 onResume 方法中设置图像路径到 ImageView:

    protected void onResume() {
      SharedPreferences sp = getSharedPreferences("AppSharedPref", MODE_PRIVATE);
      String imagePath = sp.getString("ImagePath", "");
      if (!imagePath.isEmpty()) {
        Uri imageUri = Uri.parse(imagePath);
        im1.setImageURI(imageUri);
      }
      super.onResume();
    }
    

    在 Activity B 中,你可以在 onPause 方法中使用 SharedPreferences 来保存当前图像路径,以便在下次启动 Activity B 时设置图像路径到 ImageView。

    protected void onPause() {
      SharedPreferences sp = getSharedPreferences("AppSharedPref", MODE_PRIVATE);
      Editor editor = sp.edit();
      editor.putString("ImagePath", selectedImagePath);
      editor.commit();
      super.onPause();
    }
    

    然后在 onResume 方法中读取保存的图像路径并设置到 ImageView:

    protected void onResume() {
      SharedPreferences sp = getSharedPreferences("AppSharedPref", MODE_PRIVATE);
      String imagePath = sp.getString("ImagePath", "");
      if (!imagePath.isEmpty()) {
        Uri imageUri = Uri.parse(imagePath);
        img.setImageURI(imageUri);
      }
      super.onResume();
    }
    

    注意:请确保使用 SharedPreferences 的名称 "AppSharedPref" 在两个活动中是相同的。这样,两个活动才能共享相同的 SharedPreferences。

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办