Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 空指针异常错误eclipse_Android_Eclipse_Nullpointerexception - Fatal编程技术网

Android 空指针异常错误eclipse

Android 空指针异常错误eclipse,android,eclipse,nullpointerexception,Android,Eclipse,Nullpointerexception,这是一个调用getDetails类的程序。当它调用getDetails时,它得到了这个错误。我尝试了sepretary的getDetails代码,它很有效。但是当我从这个类调用它时,它显示了这个错误。我在这里上传了错误的图片: 它认为这与这一行有关: Cursor names = context.getContentResolver().query(uri, projection, null, null, null); 代码 public class SmsFilter extends

这是一个调用getDetails类的程序。当它调用getDetails时,它得到了这个错误。我尝试了sepretary的getDetails代码,它很有效。但是当我从这个类调用它时,它显示了这个错误。我在这里上传了错误的图片:

它认为这与这一行有关:

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

}
公共类SmsFilter扩展广播接收器{
SharedReferences首选项=null;
Context=null;
@凌驾
公共void onReceive(上下文、意图){
首选项=context.getSharedReferences(“模式”,context.MODE\u PRIVATE);
if(intent.getAction().equals(“android.provider.Telephony.SMS_RECEIVED”)){
Bundle extras=intent.getExtras();
如果(附加值!=null){
Object[]pdus=(Object[])extras.get(“pdus”);
if(pdus.length<1)返回;//无效短信。不确定是否可能。
StringBuilder sb=新的StringBuilder();
字符串发送器=null;
对于(int i=0;i
您在类的顶部声明了一个成员,但从未为其分配有效的引用:

Context context = null;
因此,
context
在调用时仍然是
null

Cursor names = context.getContentResolver().query(uri, projection, null, null, null);
因此,
NullPointerException

选项1
确保分配了有效的引用(在
onReceive()
中):

选项2
或者将引用作为方法参数传递到
getDetails()

该方法本身将如下所示:

boolean getDetails(Context context, String Phonumber) { ... }

如果使用第二个选项,可以删除表示
Context=null的行,因为它不再使用。您的IDE可能已经暗示了这一点(我知道Android Studio肯定会这样做,但不确定Eclipse)。

您可以在错误报告中清楚地看到……错误是在blocker.activity.contactsearch.search(contactsearch.java:37)上说NPE,所以我觉得错误在-->boolean str=search.search(sender)行;或者,您可以单击报告中的该行,它将带您到达该位置
else if (preferences.getBoolean("contact", true) && getDetails(context, sender)) { ... }
boolean getDetails(Context context, String Phonumber) { ... }