2012-03-20 2 views
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が要求されました。

私に教えていただけてくれてありがとうございました。

乾杯

答えて

1

初期カーソル位置が-1であるので、if(c.moveToNext())代わりのif(c != null)を使用するようにしてください。

+1

Cursor.moveToNext()は、移動が成功した場合に真となるブール値に応答します。 – Stefan

+1

両方ありがとうございます。あなたは答えが正しいとそれは動作します。これは初心者(論理的なミスを見ない)の欠点の1つです。早く回答いただきありがとうございます。 – Max

関連する問題