我正在尝试制作一个简单的小部件,以显示从数据库中提取的文本。我创建了数据库+一个按钮,该按钮在按下时会重定向到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类的实例,但是它仍然有错误。还有其他方法可以从数据库中检索数据并将其显示在“小部件”按钮上?非常感谢你!
答案 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()方法。