我正在创建一个食谱应用程序,用户可以根据一种成分搜索食谱(食谱以JSON的形式)。我有一个使用MySQL数据库(在服务器上)和web服务的工作登录和注册功能。我已经实现了一个登录会话,这样登录页面才会出现,如果用户还没有登录。如果用户登录,则用户可以访问他们的帐户设置和收藏夹列表。如何存储用户帐户的收藏夹?
我现在有一个配方页面,在操作栏上有一个收藏夹按钮。点击后,配方详细信息应保存到用户的配置文件中,该配置文件可以从收藏夹列表中访问和查看。我已经使用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数据库,但我不确定这是否是一种更有效的方法。
我有什么解决方案可以将收藏添加到用户个人资料?
通过服务器将其存储在数据库中。 SharedPreferences不适用于大量数据。而且您应该可以从服务器访问该信息,以便他们可以从另一台设备登录并仍然可以访问该信息。 – chRyNaN
@chRyNaN有任何教程可以帮助我解决这个问题吗? – Theman