如何存储用户帐户的收藏夹?

时间:2016-02-27 16:42:34

标签: java android

我正在创建一个食谱应用程序,用户可以根据成分搜索食谱(食谱采用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数据库中,但我不确定这是否是一种更有效的方法。

我可以在用户个人资料中添加收藏夹的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

使用android preferences

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。

但是,如果您想要不喜欢该帐户,则需要修改收藏夹列表。在这种情况下,您应该使用数据库。