Виджет, который получает данные из базы данных - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь сделать простой виджет, который отображает тексты, взятые из базы данных. Я создал базу данных + кнопку, которая перенаправляет на MainActitivy при нажатии. Тем не менее, я не могу установить текст на кнопке, используя мой метод.

Это метод из моего класса DataBase для получения первых «Имени» и «Фамилии»:

 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);
    }
}


}

Однако я не могу вызвать какой-либо метод, который имеет дело с классом DatabaseHandler в классе WidgetProvider. Я даже пытался извлечь Firstname + Lastname из MainActivity, затем создал экземпляр класса MainActivity в WidgetProvider, но в нем все еще есть ошибки. Существуют ли другие способы извлечения данных из базы данных и отображения их на кнопке виджета? Большое спасибо!

1 Ответ

0 голосов
/ 29 мая 2019

Вам нужно использовать:

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

, а затем в своем классе WidgetProvider вы можете просто вызвать создание экземпляра DatabaseHandler, передавая контекст, например:

DatabaseHandler db = new DatabaseHandler(context);

, а затем вызвать вашМетод getData () везде, где вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...