Java 从服务中的数据库获取数据

Java 从服务中的数据库获取数据,java,android,sqlite,oop,mobile,Java,Android,Sqlite,Oop,Mobile,我已经尝试了几天,但似乎我找不到解决方案,我试图从一个服务的数据库中获得价值,但我的应用程序只是崩溃。但是相同的代码在活动中有效,但在后台服务中无效 这是密码 public class Services1 extends Service { Context cont = this; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null

我已经尝试了几天,但似乎我找不到解决方案,我试图从一个服务的数据库中获得价值,但我的应用程序只是崩溃。但是相同的代码在活动中有效,但在后台服务中无效

这是密码

   public class Services1 extends Service {
    Context cont = this;
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public void onCreates() {
    // TODO Auto-generated method stub

    String go = "running";

    Toast.makeText(cont, go, Toast.LENGTH_LONG).show();
    super.onCreate();
}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}


    public void onStartCommand(Intent intent, String Number, String Body ) {
            // TODO Auto-generated method stub


        SmsManager  smsManager = SmsManager.getDefault();

         String phoneNo = Number;
            String sms = Body;

        Data obj = new Data(this);

    //  String dar = obj.Data1("1").toString();


        try{
            SQLiteDatabase db = openOrCreateDatabase("FinalDB", MODE_PRIVATE, null);

            Cursor c = db.rawQuery("SELECT REPLAYS FROM Rtm WHERE ID = 1", null);
            c.moveToFirst();
            String dar = c.getString(c.getColumnIndex("REPLAYS"));

                String api = "Yeap service started";

                String rep = sms.replace(phoneNo+" :", "");
                smsManager.sendTextMessage(phoneNo, null, dar, null, null);

        }catch (Exception e)
        {
            System.out.println("Some Problem Here");
            e.printStackTrace();
        }




        }







}
我没有语法错误。但是,当我在没有数据库的情况下调用onstart命令时,它可以正常工作,但当使用数据库时,它不工作。我也尝试过应用程序崩溃

        Data obj = new Data(this);

            String dar = obj.Data1("1").toString(); // getting value from my SQLitehelper class it works in activity but not in service.
所以我的问题是,在服务中检索数据库的方法是错误的,还是有更好的方法

我的sqlitehelper类

public class Data  extends SQLiteOpenHelper {
 static String Database_Name = "FinalDB";
static int Database_Version = 3;
public Data(Context context) {
    super(context, Database_Name, null, Database_Version);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

public String Data1(String id)
{


    SQLiteDatabase db = getReadableDatabase();

    Cursor c = db.rawQuery("SELECT REPLAYS FROM Rtm WHERE ID = +"+id, null);
    c.moveToFirst();
    String repl = c.getString(c.getColumnIndex("REPLAYS"));



    return repl;
}
我的播音员班

   public class BroadCastRecivers extends BroadcastReceiver{

static String from;
static String body;

@Override
public void onReceive(Context cont, Intent intent) {
    // TODO Auto-generated method 

//  SmsManager  smsManager = SmsManager.getDefault();


        // TODO Auto-generated method s
          //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String str = "";            
        if (bundle != null)
        {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
           from  =   str  =  msgs[i].getOriginatingAddress();              
                str += " :";
           body =  str += msgs[i].getMessageBody().toString();
                str += "\n";

            }
            //---display the new SMS message---
        //    Toast.makeText(cont, str, Toast.LENGTH_LONG).show();

            Services1 obj = new Services1();

            obj.onStartCommand(intent, from, body);



  }
}


   }

将Select查询更改为:

Cursor c = db.rawQuery("SELECT REPLAYS FROM Rtm WHERE ID = "+id, null);
因为当前您正在where子句中传递ID为的+PLUS

并使用startService启动服务,而不是手动调用onStartCommand,如下所示:

Intent intent=new Intent(cont,Services1.class);
intent.putExtra("from",from);
intent.putExtra("body",body);
cont.startService(intent);

使用intent.getStringExtra获取Services1 onStart命令中的from和body值。您的服务创建中有一个输入错误。改变

    public void onCreates() {


@MohammedZeeshan:用question@MohammedZeeshan:您在服务方面有很多问题1。为了解决一些问题,只需添加@Override来覆盖默认的服务类方法,在我的logcat中除了01-14 16:21:48.289:I/System.out429:Thread running null 01-14 16:36:01.781:I/System.out464:Thread running null 01-14 16:36:11.549:I/System.out464:Thread running null太多的空格使此代码难以读取,我建议重新格式化代码。。。。
    @Override
    public void onCreate() {