использование sqlite в BroadcastReceiver - PullRequest
2 голосов
/ 20 марта 2012

Я хочу выполнить простую задачу в Android, которая при получении вызова номер телефона будет соответствовать номеру в моей базе данных.Однако я уже читал, что объединение sqlite и BroadcastReceiver не так просто.Ниже приведен код:

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

Я не думаю, что проблема заключается в методе ".callinfo ()", тем не менее я разместил его ниже:

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

Catch возвращается: errorandroid.database.CursorIndexOutOfBoundsException: Индекс -1 запрошен, с размером 1.

Заранее благодарю за любую помощь, которую вы можете мне дать.

Приветствия

1 Ответ

1 голос
/ 20 марта 2012

Поскольку начальная позиция курсора равна -1, попробуйте использовать if(c.moveToNext()) вместо if(c != null).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...