2
私はアンドロイドで簡単なタスクを実行します。電話を受けると、phonenumberはデータベースの番号と一致します。しかし、私はすでにsqliteとBroadcastReceiverを組み合わせるのは簡単ではないことを読んでいます。以下のコードは次のとおりです。BroadcastReceiverでsqliteを使用する
public class incomingcall extends BroadcastReceiver{
String caller;
Cursor c;
@Override
public void onReceive(Context context, Intent intent) {
sqlitedatabase search = new sqlitedatabase(context);
Bundle bundle = intent.getExtras();
if(null == bundle)
return;
Log.i("IncomingCallReceiver",bundle.toString());
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
Log.i("IncomingCallReceiver","State: "+ state);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.i("IncomingCallReceiver","Incomng Number: " + phonenumber);
try{
search.open();
c = search.callinfo(phonenumber);
if(c != null){
int iFN = c.getColumnIndex("firstname");
int iLN = c.getColumnIndex("lastname");
String FN = c.getString(iFN);
String LN = c.getString(iLN);
caller = FN + " " + LN;
}
else{
caller = "Unknown";
}
search.close();
}
catch (Exception e){
Toast.makeText(context, "error"+e.toString(), Toast.LENGTH_LONG).show();
}
Toast.makeText(context, caller, Toast.LENGTH_LONG).show();
}
}
}
I ")は.callinfo(" 問題はMethodeのであるとは思わない、それにもかかわらず、私は以下のそれを投稿:
public Cursor callinfo(String l) {
// TODO Auto-generated method stub
String[] columns = new String[]{"phonenumber", "homenumber"};
Cursor c = db.query("mycontacts", columns, "phonenumber = " + l + " OR " + "homenumber = " + l, null, null, null, null);
return c;
}
をキャッチリターン:errorandroid.database .CursorIndexOutOfBoundsException:サイズ-1のインデックス-1が要求されました。
私に教えていただけてくれてありがとうございました。
乾杯
Cursor.moveToNext()は、移動が成功した場合に真となるブール値に応答します。 – Stefan
両方ありがとうございます。あなたは答えが正しいとそれは動作します。これは初心者(論理的なミスを見ない)の欠点の1つです。早く回答いただきありがとうございます。 – Max