我正在尝试将我的Widget连接到应用程序的数据库,但我什么也不明白。
为什么这样做:
import android.app.Activity;
public class Widgets1 extends Activity{
mMioDbHelper = new SqlHelper(getApplicationContext());这不是吗?
import android.appwidget.AppWidgetProvider;
public class Widgets1 extends AppWidgetProvider{
mMioDbHelper = new SqlHelper(getApplicationContext());如何将小部件连接到数据库?我的意思是如何从小部件类进行查询?
谢谢。
发布于 2014-03-25 22:32:33
AppWidgetProvider扩展了BroadcastReceiver,而BroadcastReceiver又没有继承Context。getApplicationContext()是Context上的一种方法。正如您所确定的,将Context传递给onReceive() of a BroadcastReceiver (以及onUpdate()和AppWidgetProvider上的其他回调)的原因是,您可以执行需要Context的事情。
尽管如此,这里的代码有问题:
Context方法,就像您对Activity代码片段所做的那样。不能保证这些方法在那个时候就可以使用了。使用Context方法将延迟到组件的初始入口点,例如onCreate()的Activity。AppWidgetProvider的所有回调(如onUpdate() )都在主应用程序线程上调用。请使用IntentService或其他可以安全运行后台线程的内容。请注意,IntentService完全能够通过AppWidgetManager更新应用程序小部件UI。onUpdate()是你做某些工作的诱因,但是这项工作可以--而且经常是应该--在其他地方完成。SQLiteOpenHelper实例时要非常小心,我假设SqlHelper是SQLiteOpenHelper的一个子类。请为整个应用程序提供确切的SQLiteOpenHelper实例,以便可以利用SQLiteOpenHelper中内置的线程安全。通常情况下,它最终会成为一个单身的SQLiteOpenHelper。拥有多个实例可能会使您陷入与线程相关的麻烦。https://stackoverflow.com/questions/22646857
复制相似问题