2013-01-14 106 views
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沒有數據庫,它工作正常,但使用數據庫時,它不工作的應用程序崩潰我也曾嘗試

所以我的問題是,在服務中檢索數據庫或錯誤的做法是有一個更好的方法。

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



    } 
} 


    } 
+1

太多的空白,使該代碼難以閱讀,我建議重新格式化代碼.... – t0mm13b

+1

也有很多待辦事項... – vault

回答

1

改變你的選擇查詢爲:

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

,因爲目前你逝去的+(PLUS)與ID在子句

,並使用startService,而不是手動調用onStartCommand作爲啓動服務:

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

得到from和使用intent.getStringExtra

+0

沒有奏效 –

+0

@MohammedZeeshan:發佈您的最新日誌與問題 –

+0

@MohammedZeeshan:你在Services1中有很多問題。解決一些只需添加'@Override'來覆蓋默認的服務類方法 –

1

在服務1 onStartCommandbody值。在你的服務創建一個錯字。更改

public void onCreates() { 

@Override 
    public void onCreate() {