我正在制作一个Android应用程序,在该应用程序中,我通过Facebook登录,访问Facebook后,我使用Facebook User Image Url和Facebook User Name设置我的导航抽屉。 当我第二次尝试打开我的应用程序时,导航抽屉上没有出现Facebook User Image Url和Facebook User Name。
我尝试使用“共享首选项”保存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();
答案 0 :(得分:0)
首选项代码实际上看起来还不错。所以我怀疑问题实际上出在其他地方。
您实际上是否尝试过将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线程,这可能会导致性能问题。
答案 1 :(得分:0)
您必须像这样保存数据:
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","");