Android 如何从应用程序小部件访问sqlite数据库?

Android 如何从应用程序小部件访问sqlite数据库?,android,sqlite,widget,Android,Sqlite,Widget,DBHelper是创建数据库的数据库帮助器类。它有一个返回时间表对象的方法getTimetable。当我在主要活动中使用它时,它工作良好,并返回正确的时间表对象。在创建DBhelper时,我将(此)作为上下文参数传入。但是,当我试图在小部件updateAppWidget方法中运行它时,它会使系统崩溃,我想可能是因为我没有传递与主活动中相同的上下文 static void updateAppWidget(Context context, AppWidgetManager appWidgetMana

DBHelper是创建数据库的数据库帮助器类。它有一个返回时间表对象的方法getTimetable。当我在主要活动中使用它时,它工作良好,并返回正确的时间表对象。在创建DBhelper时,我将(此)作为上下文参数传入。但是,当我试图在小部件updateAppWidget方法中运行它时,它会使系统崩溃,我想可能是因为我没有传递与主活动中相同的上下文

static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {

    String daysFull[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

    DBHelper myDB = new DBHelper(context);
    Timetable t = myDB.getTimetable();
    //t.getTimeSlot(daysFull[Calendar.DAY_OF_WEEK],(new Date()).getHours()+":00")
    TimeSlot ts = null;
    String text = "";
    System.out.print(t.toString());
    if (t != null) {

        int hourCount = (new Date()).getHours();
        while (hourCount < 22) {

            if (t.getTimeSlot(daysFull[Calendar.DAY_OF_WEEK], hourCount + ":00") != null) {

                ts = t.getTimeSlot(daysFull[Calendar.DAY_OF_WEEK], (new Date()).getHours() + ":00");
                break;
            }
        hourCount++;
    }
    System.out.println("hello hello hello");
    if (ts != null) {

        text = ts.getStartTime() + "\n" + ts.getModule() + "\n" + ts.getRoomNumber();
    } else {

        text = "No More Classes\nFor Today";
    }
}
static void updateAppWidgetGet(上下文上下文,AppWidgetManager AppWidgetManager,int appWidgetId){
字符串daysFull[]={“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”};
DBHelper myDB=新的DBHelper(上下文);
时间表t=myDB.getTimetable();
//t、 getTimeSlot(daysFull[日历.一周中的一天],(新日期()).getHours()+“:00”)
时隙ts=null;
字符串文本=”;
System.out.print(t.toString());
如果(t!=null){
int hourCount=(新日期()).getHours();
而(小时计数<22){
if(t.getTimeSlot(daysFull[日历.一周中的一天],hourCount+“:00”)!=null){
ts=t.getTimeSlot(daysFull[日历.一周中的一天],(新日期()).getHours()+“:00”);
打破
}
hourCount++;
}
System.out.println(“hello”);
如果(ts!=null){
text=ts.getStartTime()+“\n”+ts.getModule()+“\n”+ts.getRoomNumber();
}否则{
text=“今天不再上课”;
}
}

今天是星期天,所以我从Calendar.DAY\u OF_WEEK中得到7,因此当daysFull[Calendar.DAY\u OF_WEEK]被称为daysFull时,它指向不存在的变量和craches


所以我使用daysFull[Calendar.DAY\u OF_WEEK]-1来代替…

AppWidget,并且您的应用程序具有不同的上下文,您可以使用ContentProvider

仅当您需要在多个应用程序之间共享数据时,才需要内容提供商