Android内容提供商与SharedPreferences

时间:2014-03-21 12:55:02

标签: android sharedpreferences android-contentprovider

当我的服务器知道它是跨应用程序的同一用户时,我有几个应用程序可以提供最佳用户体验。要验证用户是谁,每个用户都有一个user_token字符串,在加载应用程序时会发送到我的服务器。

我正在尝试找出跨应用程序共享此字符串的最佳方式。看起来Content Provider是在应用程序之间共享数据的最佳方式,但SQLite数据库对于存储/检索字符串似乎有点过分。

我在Android-Dev IRC上问了同样的问题,我建议我使用SharedPreferences - 但是在查看其他一些SO帖子时,不建议这样做。

最好的方法是什么?如果它是内容提供者,任何想法我应该使用什么样的数据结构来存储字符串?

提前致谢!

2 个答案:

答案 0 :(得分:6)

如果您的应用未共享流程,则SharedPreference不是一个好主意。它不是多过程安全的。为此目的构建了ContentProviders:在应用之间共享数据。您可以使用ContentProvider创建自己的SharedPreference来存储数据,而不必使用SQLite。 ContentProvider API非常适合SQL类型实现,但不是必需的。

答案 1 :(得分:0)

以下是内容提供程序中的onCreate方法(将共享首选项公开给两个应用程序):

@Override
    public synchronized boolean onCreate() {
        // TODO Auto-generated method stub
        SharedPreferences sp = getContext().getSharedPreferences(
                "SurveyMeSharedPreferences", getContext().MODE_PRIVATE);
        String apiKey = sp.getString("user_auth_token", null);

        if (apiKey == null) {
            SharedPreferences.Editor editor = sp.edit();
            try {
                apiKey = SurveyMe.checkUser();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            editor.putString("user_auth_token", apiKey);
            editor.commit();
        }

        return false;
    }