如何在Android中使用sharedpreference存储图像?
我想要使用sharedpreference在android中保存图像。 我有两个活动类,当我点击第一个活动的button,它会调用第二个活动,第二个活动显示我的首选名称在列表视图中,也重置安卓壁纸的图像,我已经设置为首选壁纸第一次活动。
对于第二个活动,代码是:
public class PreferencesActivityTest extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); String prefName = myPrefs.getString("PREF_USERNAME", "nothing"); String wallPaper = myPrefs.getString("PREFS_NAME", null); if(wallPaper != null) { try { Bitmap bm = BitmapFactory.decodeFile("/data/misc/wallpaper/"+wallPaper); Log.d(getClass().getSimpleName(),"Wallpaper name is: "+ wallPaper); setWallpaper(bm); Toast.makeText(this, "Wall paper has been changed." + "You may go to the home screen to view the same", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException fe){ Log.e(getClass().getSimpleName(),"File not found"); } catch (IOException ie) { Log.e(getClass().getSimpleName()," IO Exception"); } } ArrayList<String> results = new ArrayList<String>(); results.add("Your Preferred name is: " + prefName); this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results)); }
第一个活动调用第二个活动,但不调用if(wallPaper != null){}
为什么它不工作?
它不build议存储在共享偏好的图像,你应该存储该图像SD卡。然后将图像path(从SD卡)存储到共享喜好这样 –
SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); Editor edit=shre.edit(); edit.putString("imagepath","/sdcard/imh.jpeg"); edit.commit();
然后使用此path从SD卡中获取图像
你所要做的就是将你的图像转换成Base64
string表示forms:
Bitmap realImage = BitmapFactory.decodeStream(stream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] b = baos.toByteArray(); String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); textEncode.setText(encodedImage); SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); Editor edit=shre.edit(); edit.putString("image_data",encodedImage); edit.commit();
然后,检索时,将其转换回位图:
SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); String previouslyEncodedImage = shre.getString("image_data", ""); if( !previouslyEncodedImage.equalsIgnoreCase("") ){ byte[] b = Base64.decode(previouslyEncodedImage, Base64.DEFAULT); Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length); imageConvertResult.setImageBitmap(bitmap); }
不过,我必须告诉你, Base64支持最近才被包含在API8中。 要针对较低的API版本,您需要先将其添加。 幸运的是, 这家伙已经有了必要的教程。
另外,我创build了一个快速和肮脏的例子,我发布在github上。
嗨,朋友,我得到了上述问题的解决scheme。在这里我发布我的完整源代码,以便其他人可以使用这个解决scheme。
这是我对这个问题的第二个解决scheme,我已经发布了一个答案,这是同一个问题的不同答案。 如何在Android |共享首选项中保存图像 在Android中与图像共享偏好问题 。
按照以下步骤: –
-
声明位图和string为静态
public static final String PRODUCT_PHOTO = "photo"; public static Bitmap product_image;
-
在onCreate()写一些代码。
//---------set the image to bitmap product_image= BitmapFactory.decodeResource(getResources(), .drawable.logo); //____________convert image to string String str_bitmap = BitMapToString(product_image); //__________create two method setDefaults() andgetDefaults() setDefaults(PRODUCT_PHOTO, str_bitmap, this) getDefaults(PRODUCT_PHOTO, this);
- 在方法中写下面的代码
setDefaults();
public static void setDefaults(String str_key, String value, Context context) { SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor edit=shre.edit(); edit.putString(str_key, value); edit.apply(); }
3.2.setDefaults();
public static String getDefaults(String key, Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(key, null); }
-
BitMapToString();
public static String BitMapToString(Bitmap bitmap) { ByteArrayOutputStream baos=new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG,100, baos); byte[] arr = baos.toByteArray(); return Base64.encodeToString(arr, Base64.DEFAULT); }
现在,如果您想在其他活动中访问此图像文件,请按以下步骤操作。
-
声明string为静态
public static final String PRODUCT_PHOTO = "photo"; String str_bitmap; private Bitmap bitmap; private ImageView imageView_photo;
在onCreate()中:
//--------get image form previous activity,here ProductActivity is my previous activity. str_bitmap =ProductActivity.getDefaults(PRODUCT_PHOTO, this); //-------------- decode the string to the bitmap bitmap=decodeBase64(str_bitmap); //----------- finally set the this image to the Imageview. imageView_photo.setImageBitmap(bitmap);
对于decodeBase64();
public static Bitmap decodeBase64(String input) { byte[] decodedByte = Base64.decode(input, 0); return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); }
- 在Android Studio中无法parsing符号HttpGet,HttpClient,HttpResponce
- Android – Firebase – TaskSnapshot – 只能在私人范围内访问方法?
- 如何更改android应用程序中的背景颜色
- 更改单选button的圆形颜色 – Android
- 无法加载库:reloc_library :找不到“rand”
- Android SDK文件夹占用大量磁盘空间。 我们是否需要保留所有的系统映像?
- 如何在构buildAndroid Studio项目时添加Stacktrace或debugging选项
- 以编程方式设置textSize
- 从非活动使用startActivityForResult