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