[英]How to save data using Shared Preferences in my code?
我正在制作一个Android应用程序,通过该应用程序我通过Facebook登录,并在访问Facebook后使用Facebook User Image Url和Facebook User Name设置我的导航抽屉。 当我第二次尝试打开应用程序时,Facebook用户图像网址和Facebook用户名未出现在导航抽屉中。
我尝试使用“共享首选项”来保存Facebook用户名和图像网址,但现在我需要帮助,因为我尝试了很好,但是没有发生。
Bundle bundle = getIntent().getExtras();
String id = bundle.getString("id");
String name = bundle.getString("name");
String image_url = "https://graph.facebook.com/" + id + "/picture?type=normal";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("name", name);
editor.putString("url",image_url);
editor.commit();
final IProfile profile = new
ProfileDrawerItem().withName(prefs.getString("name",""))
.withIcon(prefs.getString("url",""))
.withIdentifier(100);
AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(this)
.withTextColor(Color.BLACK)
.withTranslucentStatusBar(true)
.addProfiles(profile)
.build();
首选项代码实际上看起来还不错。 因此,我怀疑问题实际上出在其他地方。
您是否实际尝试过将prefs.getString("url", "")
或prefs.getString("name", "")
到控制台以检查是否可以检索到任何内容?
您的问题甚至可能来自代码中的“更高”……您是否确实验证了bundle.getString("id")
和bundle.getString("name")
返回您期望的数据?
话虽这么说,您可以做一些事情来提高SharedPreferences代码的可读性和稳定性。
将首选项声明为类字段。
public class YourActivity extends Activity {
private SharedPreferences userPreferences;
@Override
public void onCreate (Bundle savedInstanceState) {
userPreferences = getSharedPreferences("USER_DATA", Context.MODE_PRIVATE);
// ...
}
// ...
}
您不需要保留对SharedPreferences.Editor
实例的引用,因为所有put操作都返回一个。 因此,您可以将呼叫链接:
userPreferences.edit()
.putString("name", name)
.putString("url", image_url)
.commit();
如果无法使其正常工作,则可以检查上面链接的调用的返回布尔值。 SharedPreferences.Editor::commit
实际上将返回一个布尔值,该布尔值表示写入是成功( true
)还是失败( false
)。
但总的来说,我建议使用apply()
而不是commit()
因为它是非阻塞的。 即,更改将被写入内存,然后写入操作系统计划的磁盘。 现在,提交将阻塞您的UI线程,这可能会导致性能问题。
您必须这样保存数据:
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE)
SharedPreferences.Editor editor = prefs.edit();
editor.putString("name", name);
editor.putString("url",image_url);
editor.commit();
并获取您的数据:
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE)
String name = perfs.getString("name","");
String url = perfs.getString("url","");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.