如何使用科特林将图像视图保存到共享首选项?

how to save imageview to sharedpreference using kotlin?

所以我正在尝试将 Imageview 保存到 sharedpreference,这样当用户从应用程序中自行选择图像时,图像将被保存并设置为 imageview id(如果有意义的话)!当用户退出我的应用程序并重新打开它时,图像将与他保存的相同吗?

我试过这段代码,但它给我错误,例如 for input string " "

我的共享偏好

CompassBtn.setOnClickListener{


        val  prefCompass = getSharedPreferences("Drawable", Context.MODE_PRIVATE)
        val editor = prefCompass.edit()
        editor.putInt("ic_compass", ic_compass.setImageResource(R.drawable.ic_compass1).toString().toInt())
editor.commit()
    }

**这就是我尝试检索它的方式**

   val prfCompass = getSharedPreferences("Drawable", Context.MODE_PRIVATE)
    prfCompass.getInt("ic_compass", 0)

请提前帮助并感谢

首先,如果您是Android开发新手,请检查Picasso上传图片。 简而言之,它 easier/faster 使用资源 id/url.

上传图片

您的问题实际上取决于您希望用户将来 select 使用的图像类型。

1) 如果所有可以select编辑的图像都已经在应用程序中,您只需将SharedPreferences中图像的资源ID保存为一个int

val sharedPref: SharedPreferences = context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)

     // Resource id is the int under drawables folder ->R.drawable.myImage
     fun save(KEY_NAME: String, value: Int) {
            val editor: SharedPreferences.Editor = sharedPref.edit()

            editor.putInt(KEY_NAME, value)

            editor.apply()
        }
   fun getInt(KEY_NAME: String): Int {

        return sharedPref.getInt(KEY_NAME, 0)
    }

2) 如果您让用户从 onActivityResult 中的图库(这是棘手的部分)select(在用户 select 带有参数的图像后调用, Intent data, 包括图片信息)。访问意图数据 (data.getData()) 将为您提供 URI。然后需要找到图片的路径(图片存放在用户phone的路径),保存到SharedPreferences。我将把获得形象的道路作为对你的挑战。当你想上传图片时,你可以;

  Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
                    Drawable drawable = new BitmapDrawable(getResources(), bitmap);
                    myLayoutItem.setBackground(drawable);

3) 如果你有一个服务器,你可以在那里上传你的图像,并将 url 作为字符串存储在 SharedPreferences/associate url 中,图像属性为用户。并使用 Picasso 显示图像。

正如您在评论提到的,您在res/drawable[中有图像=24=] 文件夹,并且您想保存用户选择的图像并在用户重新打开应用程序时加载该图像。

因此,您要做的就是将 resourceId 保存在 preference 中并使用该值。

会是这样的。

        //Suppose this is your selected drawable, you need to save its resourceId to shared preferences which is INT value
        val resourceId: Int = R.drawable.your_drawable_image 

        //save resouceId to sharedPreference

        //You can do this to set the Image in the ImageView
        your_imageview.setImageDrawable(getDrawable(resourceId))

希望对您有所帮助