启动后崩溃

发布于 2024-12-24 03:29:30 字数 5782 浏览 5 评论 0原文

我的应用程序正在使用启动服务。在该服务中,我必须从数据库获取值,但应用程序在尝试获取值时崩溃...

下面列出了 logcat 错误.............. 。

01-03 22:19:46.097: E/AndroidRuntime(240): 致命异常:main 01-03 22:19:46.0​​97:E / AndroidRuntime(240):java.lang.RuntimeException:无法创建服务com.android.antitheft.MyService:java.lang.IllegalStateException:从行0 col -1获取字段槽失败 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.app.ActivityThread.handleCreateService(ActivityThread.java:2969) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.app.ActivityThread.access $ 3300(ActivityThread.java:125) 01-03 22:19:46.097: E/AndroidRuntime(240): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2087) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.os.Handler.dispatchMessage(Handler.java:99) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.os.Looper.loop(Looper.java:123) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.app.ActivityThread.main(ActivityThread.java:4627) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在java.lang.reflect.Method.invokeNative(本机方法) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在java.lang.reflect.Method.invoke(Method.java:521) 01-03 22:19:46.097: E/AndroidRuntime(240): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在dalvik.system.NativeStart.main(本机方法) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):引起:java.lang.IllegalStateException:从第0行col -1获取字段槽失败 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.database.CursorWindow.getString_native(本机方法) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.database.CursorWindow.getString(CursorWindow.java:329) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在com.android.antitheft.MyService.onCreate(MyService.java:69) 01-03 22:19:46.0​​97:E / AndroidRuntime(240):在android.app.ActivityThread.handleCreateService(ActivityThread.java:2959) 01-03 22:19:46.097: E/AndroidRuntime(240): ... 10 更多

提前 10 个以上..............

我的 service.java //file

package com.android.antitheft;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service {

SQLiteDatabase myDB;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate() {
    super.onCreate();
    System.out.println("@@@@@@@@@@@OnCreate1111");
    Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();


      myDB = MyService.this.openOrCreateDatabase("antitheft", MODE_PRIVATE, null);
        Cursor cursor1 = myDB.query("SimSerial", null, null, null, null, null, null);
     cursor1.moveToLast();
        //cursor1.moveToFirst();
        String ss1 = cursor1.getString(cursor1.getColumnIndex("simno"));
        Toast.makeText(this, "FROM DATABASE: SIM SERIAL "+ss1, Toast.LENGTH_LONG).show();
        cursor1.close();
        myDB.close();



//          cursor2.moveToNext();
//          String num2 = cursor2.getString(cursor2.getColumnIndex("secure"));
//          
//          cursor2.moveToNext();
//          String num3 = cursor2.getString(cursor2.getColumnIndex("secure"));  

        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String ss=tm.getSimSerialNumber();

        Log.v("SERVICE", ss);

        Toast.makeText(this, "Service started : SIM SERIAL "+ss, Toast.LENGTH_LONG).show();

        Log.v("StartServiceAtBoot", "StartAtBootService -- onStartCommand()");          



        if(ss.equals(ss1))
        {
            SmsManager sms = SmsManager.getDefault();

//              sms.sendTextMessage("5556", null, "message", null, null);

            Toast.makeText(this, "INSIDE iffffffffffff ", Toast.LENGTH_LONG).show();
             myDB = MyService.this.openOrCreateDatabase("antitheft", MODE_PRIVATE, null);
            Cursor cursor2 = myDB.query("SimSerial", null, null, null, null, null, null);

            cursor2.moveToFirst();
            while (cursor2.isAfterLast() == false) {
                String num1 = cursor2.getString(cursor2.getColumnIndex("secure"));
                sms.sendTextMessage(num1, null, "message", null, null);
                cursor2.moveToNext();
            }
            cursor2.close();

            myDB.close();

//              sms.sendTextMessage(num1, null, "message", null, null);  
//              sms.sendTextMessage(num2, null, "message", null, null);
//              sms.sendTextMessage(num3, null, "message", null, null);
            }

//          else
//              
//          {
//              SmsManager sms = SmsManager.getDefault();
//              sms.sendTextMessage("5556", null, "message", null, null);
//              
//              Toast.makeText(this, "INSIDE elseeeeeeeeeeeeee", Toast.LENGTH_LONG).show();
//          }


}

@Override
public void onDestroy() {
    super.onDestroy();

    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) 
    {



        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

}

My application is using a bootup service.In the service i have to get values from a database,but the app is crashing as it tries getting the values...

The logcat error is listed below...........

01-03 22:19:46.097: E/AndroidRuntime(240): FATAL EXCEPTION: main
01-03 22:19:46.097: E/AndroidRuntime(240): java.lang.RuntimeException: Unable to create service com.android.antitheft.MyService: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
01-03 22:19:46.097: E/AndroidRuntime(240): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2969)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.app.ActivityThread.access$3300(ActivityThread.java:125)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2087)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.os.Looper.loop(Looper.java:123)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-03 22:19:46.097: E/AndroidRuntime(240): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 22:19:46.097: E/AndroidRuntime(240): at java.lang.reflect.Method.invoke(Method.java:521)
01-03 22:19:46.097: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-03 22:19:46.097: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-03 22:19:46.097: E/AndroidRuntime(240): at dalvik.system.NativeStart.main(Native Method)
01-03 22:19:46.097: E/AndroidRuntime(240): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
01-03 22:19:46.097: E/AndroidRuntime(240): at android.database.CursorWindow.getString_native(Native Method)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.database.CursorWindow.getString(CursorWindow.java:329)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
01-03 22:19:46.097: E/AndroidRuntime(240): at com.android.antitheft.MyService.onCreate(MyService.java:69)
01-03 22:19:46.097: E/AndroidRuntime(240): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2959)
01-03 22:19:46.097: E/AndroidRuntime(240): ... 10 more

Thanx in advance..............

my service.java //file

package com.android.antitheft;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service {

SQLiteDatabase myDB;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate() {
    super.onCreate();
    System.out.println("@@@@@@@@@@@OnCreate1111");
    Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();


      myDB = MyService.this.openOrCreateDatabase("antitheft", MODE_PRIVATE, null);
        Cursor cursor1 = myDB.query("SimSerial", null, null, null, null, null, null);
     cursor1.moveToLast();
        //cursor1.moveToFirst();
        String ss1 = cursor1.getString(cursor1.getColumnIndex("simno"));
        Toast.makeText(this, "FROM DATABASE: SIM SERIAL "+ss1, Toast.LENGTH_LONG).show();
        cursor1.close();
        myDB.close();



//          cursor2.moveToNext();
//          String num2 = cursor2.getString(cursor2.getColumnIndex("secure"));
//          
//          cursor2.moveToNext();
//          String num3 = cursor2.getString(cursor2.getColumnIndex("secure"));  

        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String ss=tm.getSimSerialNumber();

        Log.v("SERVICE", ss);

        Toast.makeText(this, "Service started : SIM SERIAL "+ss, Toast.LENGTH_LONG).show();

        Log.v("StartServiceAtBoot", "StartAtBootService -- onStartCommand()");          



        if(ss.equals(ss1))
        {
            SmsManager sms = SmsManager.getDefault();

//              sms.sendTextMessage("5556", null, "message", null, null);

            Toast.makeText(this, "INSIDE iffffffffffff ", Toast.LENGTH_LONG).show();
             myDB = MyService.this.openOrCreateDatabase("antitheft", MODE_PRIVATE, null);
            Cursor cursor2 = myDB.query("SimSerial", null, null, null, null, null, null);

            cursor2.moveToFirst();
            while (cursor2.isAfterLast() == false) {
                String num1 = cursor2.getString(cursor2.getColumnIndex("secure"));
                sms.sendTextMessage(num1, null, "message", null, null);
                cursor2.moveToNext();
            }
            cursor2.close();

            myDB.close();

//              sms.sendTextMessage(num1, null, "message", null, null);  
//              sms.sendTextMessage(num2, null, "message", null, null);
//              sms.sendTextMessage(num3, null, "message", null, null);
            }

//          else
//              
//          {
//              SmsManager sms = SmsManager.getDefault();
//              sms.sendTextMessage("5556", null, "message", null, null);
//              
//              Toast.makeText(this, "INSIDE elseeeeeeeeeeeeee", Toast.LENGTH_LONG).show();
//          }


}

@Override
public void onDestroy() {
    super.onDestroy();

    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) 
    {



        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

最好是你 2024-12-31 03:29:30

当您从数据库创建游标时,您必须首先检查 (cursor != null &&cursor.moveToFirst())。在您的情况下,如果没有任何可用数据,那么就会产生问题。

所以在使用 Cursor 之前添加条件

if(c != null && c.moveToFirst()) {
//write your code here
} 

java.lang.IllegalStateException:从第 0 行 col -1 获取字段槽
失败

通常,如果您尝试从游标读取列值,但游标中不存在该列,则会出现此错误。

When you Create Cursor from the Database you have to first check for both (cursor != null && cursor.moveToFirst()). In your case if there is no any data available then it will create a problem.

so before you use Cursor add the condition

if(c != null && c.moveToFirst()) {
//write your code here
} 

java.lang.IllegalStateException: get field slot from row 0 col -1
failed

Normally this error you will get if you are trying to read a column value from the cursor but that column is not exists in the cursor.

十年不长 2024-12-31 03:29:30

从错误来看,您似乎正在从 Cursor 中的 Database 获取一些内容。但是,要从光标中获取内容,您需要将光标指向光标包含的第一行。因此,如果是这种情况,您需要应用 cursor.moveToFirst(); 才能使其正常工作。否则,您应该发布完整的源代码或您认为崩溃的代码。

From the error it seems that you are fetching some content from the Database in the Cursor. But fetching the content from the Cursor you need to point the Cursor to the first row that your cursor contains. So you need to apply cursor.moveToFirst(); to get it working, if this is the case. Else you should post the full source or the code where you feel its crashing.

莫多说 2024-12-31 03:29:30

该错误表明您正在尝试从索引为 -1 的列接收字符串,这是错误的。
列从 0 开始枚举。正如 google 的文档所说的 Cursor.getColumnIndex(String name) ,如果具有“name”名称的列不存在,它将返回 -1。
检查 MyService.java 文件的第 69 行:

String num1 = cursor2.getString(cursor2.getColumnIndex("secure"));

我认为您的数据库中没有“安全”列。验证您的数据库。

The error says that you are trying to receive the string from the column with index -1 which is WRONG.
Columns are enumerated starting from 0. As google's doc says about Cursor.getColumnIndex(String name), it returns -1 if the column with "name" name doesn't exist.
Check the line 69 of your MyService.java file:

String num1 = cursor2.getString(cursor2.getColumnIndex("secure"));

I think there is no "secure" column in your database. Verify your database.

何其悲哀 2024-12-31 03:29:30

我自己找到了答案......

错误,或者说;我在编码中的错误是我应该使用 moveToNext() 而不是 isAfterLast()

I found the answer for this myself...

the error,rather say;my mistake in coding was that i was supposed to use moveToNext() instead of isAfterLast()

小矜持 2024-12-31 03:29:30

数据库位于哪里?您确定您已设置权限吗?另外,您可以将代码发布到您的 MyService 类吗?

Where is the database located? And are you sure you have your permissions set? Also, could you post the code to your MyService Class?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文