это программа, вызывающая класс getDetails. когда он вызывает getDetails, он получил эту ошибку. Я пробовал getDetails код sepretaly, и он работает. но когда я называю это из этого класса, он показывает мне эту ошибку. я загрузить изображение ошибки здесь: null указатель ошибка исключения eclipse
Это кажется связано с этой линии:
Cursor names = context.getContentResolver().query(uri, projection, null, null, null);
код
public class SmsFilter extends BroadcastReceiver {
SharedPreferences preferences = null ;
Context context = null;
@Override
public void onReceive(Context context, Intent intent) {
preferences = context.getSharedPreferences("modes",Context.MODE_PRIVATE);
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle extras = intent.getExtras();
if (extras != null) {
Object[] pdus = (Object[])extras.get("pdus");
if (pdus.length < 1) return; // Invalid SMS. Not sure that it's possible.
StringBuilder sb = new StringBuilder();
String sender = null;
for (int i = 0; i < pdus.length; i++) {
SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
String text = message.getMessageBody();
if (text != null) sb.append(text);
}
if (preferences.getBoolean("enable", true)==false) {
if (preferences.getBoolean("all", true)){ abortBroadcast();}
else if (preferences.getBoolean("blacklist", true)){
boolean str=Search.search(sender);
if (sender != null && str ==true) {
abortBroadcast();
}
}
else if (preferences.getBoolean("contact", true)&& getDetails(sender)){
abortBroadcast();
}
else {}}
return;
}
}
// ...
}
boolean getDetails(String Phonumber){
Boolean answer=null;
Log.i("sss", "to here");
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
// ContentResolver cr = getContentResolver();
// Cursor cur = context.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
Log.i("sss", "to here1");
Cursor names = context.getContentResolver().query(uri, projection, null, null, null);
//int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
int indexNumber = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
Log.i("sss", "to here n"+indexNumber);
names.moveToFirst();
do {
Log.i("sss", names.getString(indexNumber));
String number = names.getString(indexNumber);
number.replace(" ", "");
if(number.startsWith("0")){
number="+98"+context.getString(1,number.length());}
if(Phonumber.startsWith("0")){
Phonumber="+98"+Phonumber.substring(1,Phonumber.length());}
if (number.equals(Phonumber))
{answer=true;}
} while (names.moveToNext());
return answer;
}
}
Вы можете очистить в отчете об ошибке ... ошибка сказать NPE на blocker.activity.contactsearch.search (contactsearch.java:37), поэтому я чувствую, что ошибка находится в строке -> boolean str = Search.search (отправитель); в качестве альтернативы вы можете щелкнуть по этой строке в отчете, и это приведет вас к месту назначения –