我正在创建一个食谱应用程序,用户可以根据成分搜索食谱(食谱采用JSON形式)。我有一个使用MySQL数据库(在服务器上)和webservices的登录和注册功能。我已经实现了一个登录会话,以便只有在用户尚未登录时才会显示登录页面。如果用户已登录,则用户可以访问其帐户设置和收藏夹列表。
我现在在操作栏上有一个带有收藏夹按钮的配方页面。单击时,配方详细信息应保存到用户的配置文件中,可以从收藏夹列表中访问和查看。我已经使用SharedPreferences进行登录会话,但是我仍然可以使用它来存储用户个人资料的收藏夹吗?
所以我的意思是如果我有一个名为" test123"并且他在他的收藏夹中添加了一个配方,SharedPreferences将为用户存储此配方" test123"?
SessionManager.java
public class SessionManager {
// LogCat tag
private static String TAG = SessionManager.class.getSimpleName();
// Shared Preferences
SharedPreferences pref;
Editor editor;
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Shared preferences file name
private static final String PREF_NAME = "Login";
private static final String KEY_IS_LOGGEDIN = "isLoggedIn";
public SessionManager(Context context) {
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
editor.apply();
}
public void setLogin(boolean isLoggedIn) {
editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn);
// commit changes
editor.commit();
Log.d(TAG, "User login session modified!");
}
public boolean isLoggedIn(){
return pref.getBoolean(KEY_IS_LOGGEDIN, false);
}
}
RecipePage.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.favourites:
Toast.makeText(getActivity(), "Added to favourites", Toast.LENGTH_LONG).show();
default:
return super.onOptionsItemSelected(item);
}
}
Favourites.java - (fragment_favs是一个列表视图)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_favs, container, false);
session = new SessionManager(getActivity());
if(!session.isLoggedIn()){
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, new Login());
ft.commit();
}
return rootView;
}
或者我正在考虑将其保存到MySQL数据库中,但我不确定这是否是一种更有效的方法。
我可以在用户个人资料中添加收藏夹的解决方案是什么?
答案 0 :(得分:0)
SharedPreferences spref = getSharedPreferences("your_prefs_name", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = spref.edit();
editor.putString("deficitPercentage_key", prefVal); //
editor.commit();
prefVal是json,所以你可以将json转换成pojo(序列化和反序列化)
答案 1 :(得分:0)
您可以使用相同的pojo类并将其保存到文件中。如果只是为了本地存储对象,可以避免db。
但是,如果您想要不喜欢该帐户,则需要修改收藏夹列表。在这种情况下,您应该使用数据库。