为什么共享首选项无法处理我的字符串?

时间:2014-03-23 12:12:06

标签: android string sharedpreferences

我使用shared preferences存储一些图片缩略图,这些缩略图如下所示:

"image:\/\/http%3a%2f%2fimage.tmdb.org%2ft%2fp%2foriginal%2fwBtEVh8Q5dglfjyulGZtgXVy9qi.jpg\/"

和:

"image:\/\/http%3a%2f%2fimage.tmdb.org%2ft%2fp%2foriginal%2fojgf8iJpS4VX6jJfWGLpuEx0wm.jpg\/"

我发现当把一些常规的String放入其中时它会有效地工作,我可以毫无问题地得到它(这使我确保我的代码没有任何问题),但是当放下这些缩略图并尝试将其取回它无法找到它。那么,String没有采用SharedPreferences格式吗?

这是我的代码(如果需要):

放置:

SharedPreferences sharedPreferences = PreferenceManager
                    .getDefaultSharedPreferences(this);

Editor editor = sharedPreferences.edit();
editor.putString(thumbnail, "some string");
editor.commit();

得到:

String  def_value = sharedPreferences.getString(thumbnail, "value");

2 个答案:

答案 0 :(得分:1)

在Java中,\之前的任何字符都被视为转义字符。例如,\n是表示新行的转义字符。在以下字符串中;

"image:\/\/http%3a%2f%2fimage.tmdb.org%2ft%2fp%2foriginal%2fojgf8iJpS4VX6jJfWGLpuEx0wm.jpg\/"

\/是非法转义字符(即,它并不意味着什么)。所以,如果你真的想要那两个角色,你需要的是反斜杠的转义字符(\\),后跟正斜杠,看起来像\\/

鉴于你的字符串看起来像网址,我想你实际上寻找的东西根本不需要转义字符,可能就像这样。

"image://http%3a%2f%2fimage.tmdb.org%2ft%2fp%2foriginal%2fojgf8iJpS4VX6jJfWGLpuEx0wm.jpg/"

答案 1 :(得分:0)

尝试使用此功能(来自this):

 // provide the app package name
   SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);
 Editor editor = sharedPreferences.edit();
 editor.putString("thumbnail", "some string");
 editor.commit();

获取:

SharedPreferences sharedPreferences = getSharedPreferences("com.example.app", Activity.MODE_PRIVATE);
String  def_value = sharedPreferences.getString("thumbnail", "value");