从数据库检索数据的小部件

时间:2019-05-29 02:43:03

标签: android database widget

我正在尝试制作一个简单的小部件,以显示从数据库中提取的文本。我创建了数据库+一个按钮,该按钮在按下时会重定向到MainActitivy。但是,我似乎无法使用我的方法在按钮上设置文本。

这是我的数据库类中的一种方法,用于检索第一个“名字”和“姓氏”:

 public String getData(int i) {
    StringBuffer buffer = new StringBuffer();
    db = this.getReadableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = "+ i, null);
    while (res.moveToNext()) {
        String firstname = res.getString(1);
        String lastname = res.getString(2);
        buffer.append(firstname);
        buffer.append(" ");
        buffer.append(lastname);
    }

    return buffer.toString();
}

它返回一个字符串,以后我用setCharSequence()方法将其用于在按钮上设置文本:

public class WidgetProvider extends AppWidgetProvider {

DatabaseHandler myDb;



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    String result = myDb.getData(1);

    for (int appWidgetId : appWidgetIds) {
        Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        views.setOnClickPendingIntent(R.id.button, pendingIntent);
        views.setCharSequence(R.id.button,"setText",result);
        appWidgetManager.updateAppWidget(appWidgetId,views);
    }
}


}

但是,我似乎无法调用任何处理WidgetProvider类中的DatabaseHandler类的方法。我什至尝试从MainActivity检索Firstname + Lastname,然后在WidgetProvider中创建MainActivity类的实例,但是它仍然有错误。还有其他方法可以从数据库中检索数据并将其显示在“小部件”按钮上?非常感谢你!

1 个答案:

答案 0 :(得分:0)

您需要使用:

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.mContext = context;
}

,然后在您的WidgetProvider类上,只需通过传递如下上下文即可调用create DatabaseHandler实例:

DatabaseHandler db = new DatabaseHandler(context);

,然后在需要时调用getData()方法。