Я вижу эту sh в Crashlytics. Я не знаю, как это воспроизвести. Насколько я понимаю, когда я читаю контакты, один из контактных номеров является нулевым. После того, как я прочитал номер телефона, я передаю номер телефона в класс Encoder, где этот номер будет отформатирован. После передачи номера телефона в кодировщик мое приложение cra sh. Я попытался удалить все номера телефонов одного из моих контактов, но курсор не возвращает этот контакт. В этом примере кода я показал часть Encoder.class
public class Encoder {
public String getCleanedUpPhoneNumber(String phoneNumber) {
return phoneNumber.replace("(", "").replace(")", "")
.replace("-", "").trim();
}
}
public class ContactsManager {
Context mContext;
Encoder mEncoder;
public ContactsManager() {
}
public Map<String, String> getPhoneContacts() {
Map<String, String> contactList = new HashMap<>();
String[] projection = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor phones = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
if (phones.getCount() > 0) {
while (phones.moveToNext()) {
String contactName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactNumber = mEncoder.getCleanedUpPhoneNumber(contactNumber);
contactList.put(contactNumber, contactName);
}
}
phones.close();
return contactList;
}
}
Cra sh log
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.replace(java.lang.CharSequence, java.lang.CharSequence)' on a null object reference
at com.example.data.Encoder.getCleanedUpPhoneNumber(Encoder.java:90)
at com.example.data.ContactsManager.getPhoneContacts(ContactsManager.java:33)
at com.example.ui.details.DetalizDetViewModel.readContacts(DetalizDetViewModel.java:94)
at com.example.ui.details.DetalizDetController.onAttach(DetalizDetController.java:69)
at com.bluelinelabs.conductor.Controller.attach(Controller.java:908)
at com.bluelinelabs.conductor.Controller$7.onAttached(Controller.java:1030)
at com.bluelinelabs.conductor.internal.ViewAttachHandler.reportAttached(ViewAttachHandler.java:87)
at com.bluelinelabs.conductor.internal.ViewAttachHandler$1.onAttached(ViewAttachHandler.java:47)
at com.bluelinelabs.conductor.internal.ViewAttachHandler$2.onViewAttachedToWindow(ViewAttachHandler.java:126)
at android.view.View.dispatchAttachedToWindow(View.java:14368)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2984)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2984)
at android.view.ViewGroup.addViewInner(ViewGroup.java:4226)
at android.view.ViewGroup.addView(ViewGroup.java:4040)
at android.view.ViewGroup.addView(ViewGroup.java:3985)
at android.view.ViewGroup.addView(ViewGroup.java:3961)
at com.bluelinelabs.conductor.changehandler.AnimatorChangeHandler.performChange(AnimatorChangeHandler.java:126)
at com.bluelinelabs.conductor.ControllerChangeHandler.executeChange(ControllerChangeHandler.java:204)
at com.bluelinelabs.conductor.ControllerChangeHandler.executeChange(ControllerChangeHandler.java:154)
at com.bluelinelabs.conductor.Router.performControllerChange(Router.java:823)
at com.bluelinelabs.conductor.Router.performControllerChange(Router.java:793)
at com.bluelinelabs.conductor.Router.performControllerChange(Router.java:775)
at com.bluelinelabs.conductor.Router.pushController(Router.java:186)
at com.example.ui.main.detaliz.TabDetalizController.openDetails(TabDetalizController.java:135)
at com.example.ui.main.detaliz.TabDetalizViewModel$init2$2.onItemClick(TabDetalizViewModel.java:77)
at eu.davidea.viewholders.FlexibleViewHolder.onClick(FlexibleViewHolder.java:122)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5835)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Encoder contactNumber = mEncoder.getCleanedUpPhoneNumber (contactNumber) ;