【问题标题】:Getting data from database in Service从 Service 中的数据库获取数据
【发布时间】:2013-01-14 11:30:02
【问题描述】:

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

这是代码

   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();
        }




        }







}

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

        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);



  }
}


   }

【问题讨论】:

  • 太多的空白使这段代码难以阅读,我建议重新格式化代码......

标签: java android sqlite oop mobile


【解决方案1】:

您的服务创建中有错字。改变

    public void onCreates() {

    @Override
    public void onCreate() {

【讨论】:

    【解决方案2】:

    将您的选择查询更改为:

    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 onStartCommand 中获取frombody

    【讨论】:

    • @MohammedZeeshan:发布您的最新日志并提出问题
    • @MohammedZeeshan:您在 Services1 中有很多问题。解决一些只需添加@Override 来覆盖默认服务类方法
    • 除了 01-14 16:21:48.289: I/System.out(429): Thread running null 01-14 16:36:01.781: I/System. out(464): 线程运行空 01-14 16:36:11.549: I/System.out(464): 线程运行空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2022-01-10
    • 1970-01-01
    • 2012-10-22
    • 2017-12-07
    相关资源
    最近更新 更多