0

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

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

我从来没有从数据库中为小部件提取数据。无论哪种方式,我都没有收到任何直接错误,可以放置小部件,应该填充文本视图的地方只是空的。

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

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

编辑:我计划在我开始工作时制作这个开源项目,我看不到任何其他开源项目可以帮助解决这类问题,所以如果我让它工作,我可以与大家分享。

4

2 回答 2

0

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

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

有关详细信息,请参阅此示例

于 2013-05-01T12:59:24.620 回答
0

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

于 2013-05-03T21:03:32.083 回答