从数据库中提取数据以显示在窗口小部件上 - 没有得到响应

时间:2013-04-30 18:36:19

标签: android sqlite widget

我已根据我在活动中所做的工作以及此处的其他问题创建了此代码。我没有错。只是一条警告信息:

04-30 19:19:26.063: W/BroadcastQueue(480): 
Unable to launch app com.test.application/10091
for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED flg=0x10 
cmp=com.test.application/.TestWidget }: process is bad

其次是更新操作:

04-30 19:19:26.063: W/BroadcastQueue(480): Unable to launch app
com.test.application/10091 for broadcast Intent {   
act=android.appwidget.action.APPWIDGET_UPDATE flg=0x10 
cmp=com.test.application/.TestWidget (has extras) }: process is bad

然后(我不知道这是否属于它,它显示为蓝色):

04-30 19:19:34.073: D/Launcher.Model(752): DbDebug   
Add item (null) to db, id: 126 (-100, 1, 1, 3)

以下是我在TestWidget类中的代码:

package com.test.application;

public class TestWidget extends AppWidgetProvider {

static DBHelper dbhelper;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);

    updateWidgetContent(context, appWidgetManager, appWidgetIds);
}

public static void updateWidgetContent(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    dbhelper.openDatabase();

    String name = "basestring";
    Cursor c = getDatabaseHelper(context).getReadableDatabase().rawQuery("SELECT * FROM websites ORDER BY RANDOM()", null);
    name = c.getString(c.getColumnIndex("weburl"));

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.main);
    remoteView.setTextViewText(R.id.TextView1, name);
    dbhelper.close();

    appWidgetManager.updateAppWidget(appWidgetIds, remoteView);
}

private static DBHelper getDatabaseHelper(Context context) {
    DBHelper dbhelper = null;
    if (dbhelper == null) {
        dbhelper = new DBHelper(context);
        dbhelper.openDatabase();
    }
    return dbhelper;
}   
}

我从数据库和活动的实验中获取了代码,并从此处获取了一些代码:Android: get Widget Data from database

我从未使用从数据库中提取小部件的数据。无论哪种方式,我都没有得到任何直接错误,可以放置小部件,它只是填充textview的空白。

我使用的数据库有超过2000个项目,所以它绝对不是空的。我希望它只显示一个。我在带有按钮的活动中完美地做到了这一点。 (按下按钮,数据库中的一个结果显示在文本视图中)。

我真的很想得到一些帮助。我觉得我非常接近。

编辑:当我开始工作时,我打算制作这个开源软件,我看不到任何其他开源项目可以帮助解决这类问题,所以如果我开始工作,我可以与大家分享

2 个答案:

答案 0 :(得分:0)

看起来你正试图在启动器进程中从db获取数据(widget在“主启动器进程”下工作),因此异常告诉“进程不好”。

为了从数据库中获取数据并在widgetm中显示它,我建议您使用RemoteViewsServiceRemoteViewsFactory类。它们允许您使用ListView或StackView等视图创建和更新小部件。 / p>

有关详细信息,请参阅this examples

答案 1 :(得分:0)

我最终自己解决了这个问题。我会在某些时候让我的项目开源,因为那里几乎没有任何细节。我基本上不得不在open和close数据库之上调用createDatabase()方法。我猜它没有被召唤。