2015-11-11 3 views
0

Hello stackoverflow world! Наступает время, когда ответ, который вы ищете, еще не здесь, и вам придется спросить.Strange NullPointerException on .getFirst()

Моя проблема в том, что я проверяю нулевые значения с помощью оператора if, и я все еще получаю исключение NullPointerException.

У меня есть приложение, проверенное кем-то, и они сталкиваются с NullPointerException, но я не могу воссоздать ошибку для жизни меня. что затрудняет определение проблемы.

Это CrashReport на консоли разработчика для приложения:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dev.admin.blacklist/com.dev.admin.blacklist.Page_RecentCalls}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2391) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) 
    at android.app.ActivityThread.access$800(ActivityThread.java:166) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 
    at android.os.Handler.dispatchMessage(Handler.java:110) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5387) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:831) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at com.dev.admin.blacklist.Page_RecentCalls.getRecentContacts(Page_RecentCalls.java:110) 
    at com.dev.admin.blacklist.Page_RecentCalls.onCreate(Page_RecentCalls.java:32) 
    at android.app.Activity.performCreate(Activity.java:5363) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335) 
    ... 11 more 

и это линия 110, которая бросает эту ошибку:

Cursor cursor = getContentResolver().query(queryUri, projection, null, null, sortOrder); 


    while (cursor.moveToNext()) 
    { 
     String phoneNumber = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); 
     String title = (cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME))); 
     if(phoneNumber != null && !phoneNumber.isEmpty() && !phoneNumber.equals(manager.getVoiceMailNumber().toString())) 
     { 
      if(title == null || title.isEmpty())title = "No-name"; 
      if(recentcontacts.size() > 1) 
      { 
       String one = ""; 
       one = recentcontacts.get(recentcontacts.size() - 1).getFirst(); //Line 110 error was here 
       if(!one.equals(title)) recentcontacts.add(new Object_TwoString(title,phoneNumber)); 
      } 
      else recentcontacts.add(new Object_TwoString(title,phoneNumber)); 
     } 

    } 
    cursor.close(); 
    return recentcontacts; 
} 
} 




public Object_TwoString(String one, String two) 
{ 
    setStrings(one,two); 
} 

public String[] getStrings(){ String[] strings = {firstString,secondString}; return strings;} 
public String getFirst(){return firstString;} 
public String getSecond(){return secondString;} 

public Boolean IsContained(List<Object_TwoString> obj) 
{ 
    for(Object_TwoString ts: obj) 
    { 
     if(ts.getFirst().equals(firstString) && ts.getSecond().equals(secondString))return true; 
    } 
    return false; 
} 
+0

Manager.getVoicemailNumber() может иметь значение null, поэтому .toString() будет вызывать NPE? – Jan

+0

hmm ... Мне нужно попробовать проверить нулевой номер голосовой почты, но если бы это было так, то не возникла бы ошибка в строке, где я проверяю номер голосовой почты? (строка 105) вместо строки 110? –

ответ

-1

Фактическое NullPointerException происходит здесь:

getContentResolver() 

Вызов этого метода возвращает null, а затем вызывает query() при этом не удается, потому что вы не можете вызвать методы на null объектов. (FWIW: нуль не должен существовать и рак на программное обеспечение инженерных проектов во всем мире)

Я сильно подозреваю, какой-то стадии инициализации, необходимые для getContentResolver() (который, к сожалению, не навязанного типов) является кусая вас здесь. Существует временная связь, требующая от вас какого-то танца дождя, чтобы этот метод работал правильно, что является плохим выбором дизайна.

+0

исходный код –

+0

@AshE хороший пункт. Я обновил в случае, если общее решение NPE, помеченное как дубликат, не поможет вам. –

+0

Спасибо! ... Я должен был это увидеть. yes..It был getContentResolver(), который давал нулевое значение для номера голосовой почты (без SIM-карты) –