gpt4 book ai didi

android - 在 BroadcastReceiver 中使用 sqlite

转载 作者:行者123 更新时间:2023-11-29 02:06:25 26 4
gpt4 key购买 nike

我想在 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,所以尝试使用if(c.moveToNext())而不是if(c != null)

关于android - 在 BroadcastReceiver 中使用 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com