小编Tov*_*bal的帖子

在极少数情况下,"android.database.sqlite.SQLiteException:没有这样的表"错误

我在应用程序商店中有一个应用程序,但有一种类型的错误报告,我似乎无法完全弄清楚.我的应用程序使用内部sqlite数据库,但在某些设备上(当然不是大多数)有时会发生以下错误:

android.database.sqlite.SQLiteException:没有这样的表:image_data(代码1):,同时编译:SELECT Min(标记)FROM image_data WHERE category ='Astronomy'AND stamp> = 1357426800 and coalesce(title_nl,'')=' "

我确信这个表存在,我确信这个查询是正确的.我知道这个错误只发生在应用程序的小部件和AlarmManager触发的BroadcastReceiver中(应用程序偶尔尝试下载新条目,因为它是当天应用程序的图片).

我认为它与访问数据库时我所处的Context有关.我有一个名为AppContextHelper的类,它扩展了Application并且有一个静态成员,我在其中存储上下文.访问数据库时始终使用该上下文.

我的问题:在某些情况下,当获取小部件中的数据库或前面提到的由AlarmManager触发的BroadcastReceiver时,这个上下文是无效的吗?在这种情况下,我应该使用提供的Context来支持'application'上下文?如果是这样,为什么该上下文无效或更好,哪个上下文是提供的?

提前致谢!

正如请求导致问题的代码一样,仅在某些设备上,而且仅在小部件或AlarmManager类中.我将发布导致AlarmManager类中的错误的代码(即具有最少行的代码)

  1. 初始化警报的代码:

        Intent myIntent = new Intent(AppContextHelper.getContext(), ApodDownloader.class);
        mPendingIntent = PendingIntent.getBroadcast(AppContextHelper.getContext(), 0, myIntent, 0);
    
        AlarmManager alarmManager = (AlarmManager)AppContextHelper.getContext().getSystemService(Context.ALARM_SERVICE);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
    
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() + 10000, AlarmManager.INTERVAL_HOUR, mPendingIntent);
    
    Run Code Online (Sandbox Code Playgroud)
  2. AppContextHelper.java

    public class AppContextHelper extends Application {
    
        private static Context mContext;
    
        @Override
        public void onCreate() {
            super.onCreate();
            mContext = this;
        }
    
        public static Context getContext(){
            return mContext;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. (部分)ApodDownloader.java(包含抛出异常的行)

    @Override
    public void onReceive(Context …
    Run Code Online (Sandbox Code Playgroud)

android android-widget android-sqlite

14
推荐指数
1
解决办法
2658
查看次数

标签 统计

android ×1

android-sqlite ×1

android-widget ×1