如何存储小部件的数据?

din*_*mab 5 android persistence android-widget android-preferences

我正在创建一个小部件,我需要为其存储一些数据。我没有该Activity小部件,因此无法使用SharedPreferences. 我存储的数据非常小,但访问频繁,因此使用数据库来存储它就有点矫枉过正了。我曾想过使用简单的文件,但这似乎不是一个好的解决方案。有什么方法可以存储小部件的简单数据吗?

Jak*_*ile 4

您不需要 来Activity存储首选项,只需要Context. 在扩展的类中,您应该在所有相关方法(例如和 )AppWidgetProvider中收到上下文。onUpdateonDeleted

然后,您可以使用PreferenceManager来获取首选项对象并在其中存储您需要的内容,如下所示:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    int[] appWidgetIds)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    String value = prefs.getString("key-string", null);
    if(value != null)
    {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,您提到您考虑过使用文件,但出于性能原因不想这样做。SharedPreferences对象实际上最终使用简单的文件,它们只是由 Android 为您管理。如果您要经常访问它,您仍然需要注意性能。SQLite DB 也是如此,因为它们也只是文件。