Android内容提供商与SharedReferences

Android内容提供商与SharedReferences,android,sharedpreferences,android-contentprovider,Android,Sharedpreferences,Android Contentprovider,我有几个应用程序,当我的服务器知道不同应用程序中的用户都是同一用户时,它们会提供最佳的用户体验。为了验证用户是谁,每个用户都有一个user_令牌字符串,该字符串在加载应用程序时发送到我的服务器 我正在尝试找出在应用程序之间共享此字符串的最佳方式。内容提供商似乎是在应用程序之间共享数据的最佳方式,但SQLite数据库在存储/检索字符串方面似乎有点过火 我在Android开发者IRC上问了同样的问题,建议我使用SharedReferences——但在浏览其他一些关于这个的SO帖子时,不建议这样做 最

我有几个应用程序,当我的服务器知道不同应用程序中的用户都是同一用户时,它们会提供最佳的用户体验。为了验证用户是谁,每个用户都有一个user_令牌字符串,该字符串在加载应用程序时发送到我的服务器

我正在尝试找出在应用程序之间共享此字符串的最佳方式。内容提供商似乎是在应用程序之间共享数据的最佳方式,但SQLite数据库在存储/检索字符串方面似乎有点过火

我在Android开发者IRC上问了同样的问题,建议我使用SharedReferences——但在浏览其他一些关于这个的SO帖子时,不建议这样做

最好的方法是什么?如果是内容提供者,你知道我应该用什么样的数据结构来存储字符串吗


提前谢谢

如果你的应用程序没有共享进程,那么
SharedReference
不是一个好主意。它不是多进程安全的
ContentProviders
的构建目的是:在应用程序之间共享数据。您可以创建自己的
ContentProvider
,它使用
SharedReference
存储数据,而不必使用SQLite。
ContentProvider
API非常适合SQL类型的实现,但这不是一个要求。

以下是我在内容提供程序中的onCreate方法的样子(它将SharedPref公开给两个应用程序):


我不知道你可以创建一个ContentProvider来使用SharedReference存储数据!你知道有没有这样一个实现的教程或示例可以让我查看吗?@TomHammond,我不知道有哪一个示例可以立即查看,尽管它在不久的将来给我提供了一篇很好的博客文章。:-)这就是说,如果您想看到一种替代方法,用SQLite数据库以外的东西来支持
ContentProvider
,请查看SDK示例代码的API演示区域。在API 19示例中,它位于示例中的遗留树中。查找
FileProvider.java
。这是一个
ContentProvider
,它使用一个简单的文件来存储数据,而不是数据库。太棒了,我来看看。我想我以前没有看过你的博客-你有链接吗?我也想去看看!嘿,你能把整个内容发布出来吗?我想做同样的事情。使用包含由我的应用程序中的多个进程访问的SharedReferences的ContentProvider。
@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;
    }