这是我现在正在使用我的Android应用程序处理的问题。程序在模拟器上运行正常,没有任何错误,但在运行相同操作系统的真实设备上却出现了错误。
我有一个应用程序小部件更新服务,可以更新我的小部件。此服务检查窗口小部件是否在屏幕上,否则不进行更新过程。在模拟器上工作正常。
每次必须在OnReceive方法中更新窗口小部件时,我都会在字符串变量check_intent中捕获该意图,该变量告诉我其ENABLED,DELETED或UPDATE意图。
我有一个SQLite表tuuserid_widget_enabled,其中仅启用了一个字段。启用意图后,将其切换为1,将其删除时将其切换为0。工作正常。
当意图是UPDATE时,我检查DB表中的enable字段是否为1(如果为true),然后继续进行更新。这是我在设备上收到“游标索引超出范围”错误的地方,但是一切都在模拟器上按预期工作。
我将不胜感激。提前致谢。抱歉,如果我做错了什么,我正在学习Android。
这是错误-
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): FATAL EXCEPTION: main
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): java.lang.RuntimeException: Unable to start service Test.TU.TUWidget$UpdateService@45d2b7d0 with Intent { cmp=Test.TU/.TUWidget$UpdateService }: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3282)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.ActivityThread.access$3600(ActivityThread.java:135)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2211)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.os.Looper.loop(Looper.java:144)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.ActivityThread.main(ActivityThread.java:4937)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at java.lang.reflect.Method.invokeNative(Native Method)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at java.lang.reflect.Method.invoke(Method.java:521)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at dalvik.system.NativeStart.main(Native Method)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at Test.TU.TUWidget$UpdateService.onStart(TUWidget.java:209)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.Service.onStartCommand(Service.java:420)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3267)
02-02 18:58:03.007: ERROR/AndroidRuntime(4292): ... 10 more
以下是代码片段。
@Override
public void onReceive(Context context, Intent intent) {
check_intent = intent.getAction();
widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate,PendingIntent.FLAG_UPDATE_CURRENT);
alarms.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+ PERIOD, newPending);
context.startService(new Intent(context, UpdateService.class));
}
public static class UpdateService extends Service {
@Override
public void onStart(Intent intent, int startId) {
if (check_intent.contains("APPWIDGET_ENABLED")){
TUDB tdb = new TUDB(getApplicationContext());
final SQLiteDatabase db = tdb.getReadableDatabase();
String update_sql = "update tuuserid_widget_enabled set enabled = '1';";
if(db.isOpen() && !db.isReadOnly()){
db.execSQL(update_sql);
db.close();
}
}
else
**if (check_intent.contains("APPWIDGET_UPDATE")){
TUDB tdb1 = new TUDB(getBaseContext());
final SQLiteDatabase db1 = tdb1.getReadableDatabase();
String check_widget_enabled = "select enabled from tuuserid_widget_enabled;";
if(db1.isOpen() && !db1.isReadOnly()){
Cursor cur = db1.rawQuery(check_widget_enabled, null);
cur.moveToFirst();
widget_enabled = cur.getInt(0); //this is where it bombs
cur.close();
db1.close();
}**
if (widget_enabled == 1){
RemoteViews updateViews = buildUpdate(getApplicationContext());
ComponentName thisWidget = new ComponentName(getApplicationContext(), TUWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
manager.updateAppWidget(thisWidget, updateViews);
}
}
else
if (check_intent.contains("APPWIDGET_DELETED")){
TUDB tdb = new TUDB(getBaseContext());
final SQLiteDatabase db = tdb.getReadableDatabase();
String update_sql = "update tuuserid_widget_enabled set enabled = '0';";
if(db.isOpen() && !db.isReadOnly()){
db.execSQL(update_sql);
db.close();
}
}
}
您的游标/数据库可能为空-没有行。尝试:
if (cur.moveToFirst()) { // returns false if cursor is empty
widget_enabled = cur.getInt(0);
} else {
widget_enabled = 0;
}
我正在尝试制作一个简单的GPS应用程序,因此我想在我的设备模拟器上进行检查。 因此,我通过工具在android studio中启用ADB集成 然后,我按绿色箭头运行我的应用程序,它在模拟器上启动,但由于某种原因,在设备监视器模拟器中,所有选项都被禁用,如下图所示: 所有选项都被禁用 任何想法,以便我可以改变坐标?
问题内容: 我似乎无法在Android模拟器中启动任何应用程序,因为每隔约2秒钟就会弹出此错误,并且我相信这会使我的应用程序崩溃… 注意:我从来没有尝试过录制音频,我认为这是尝试做的…为什么显示此声音?尽管我试图用无法正常工作的输入流向JPCT-AE打开3D模型! 错误: 如我之前所说,这每隔约2秒钟就会弹出…是什么原因引起的?我尝试过多次重启模拟器,并且这种情况一直持续下去!! 编辑:我也删除并
我似乎无法在我的Android emulator中启动我的任何应用程序,因为每隔2秒就会出现一个错误,我相信这会使我的应用程序崩溃。。。 注:我从未试过录制音频,我认为这是在尝试。。。为什么它会显示这个?尽管我试图用一个从未工作过的输入流将3D模型打开到JPCT-AE中! 错误: 正如我之前所说,这是弹出每约2秒。。。这可能是什么原因造成的?我已经多次尝试重新启动模拟器,并且一直出现这种情况!!
我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这
这个小部件在模拟器4.1.2上工作得很好,当安装在真正的设备上时,它甚至不会显示在小部件列表上,就像安装了一样,但我不能让它正常工作。 下面是manifest.xml 和小部件提供程序
朋友们试图在ios实际设备上运行appium脚本,出现以下错误 Eclipse错误: [TestNG]正在运行: /private/var/folders/05/79kfthm94qjd3bngd2l5pv7r0mx69v/T/testng-eclipse--1690789728/testng-customsuite.xml 配置失败:@BeforeClass setUpBeforeClass o