0

私は何日も試みてきましたが、サービスのデータベースから値を取得しようとしている解決策が見つからないようですが、アプリがクラッシュします。ただし、同じコードはアクティビティでは機能しますが、バックグラウンド サービスでは機能しません。

これがコードです

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



  }
}


   }
4

2 に答える 2

1

There is a typo in your service creation. Change

    public void onCreates() {

with

    @Override
    public void onCreate() {
于 2013-01-14T11:39:28.223 に答える
1

選択クエリを次のように変更します。

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

を使用して Services1 でgetfromおよびvaluebodyonStartCommandintent.getStringExtra

于 2013-01-14T11:33:53.563 に答える