2016-02-27 70 views
-1

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

我有什么解决方案可以将收藏添加到用户个人资料?

+1

通过服务器将其存储在数据库中。 SharedPreferences不适用于大量数据。而且您应该可以从服务器访问该信息,以便他们可以从另一台设备登录并仍然可以访问该信息。 – chRyNaN

+0

@chRyNaN有任何教程可以帮助我解决这个问题吗? – Theman

回答

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(序列化和反序列化)

0

您可以使用相同的POJO类,并将其保存到一个文件。如果意图只是本地存储对象,可以避免db。

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

相关问题