我正在使用' michaelrocks.libphonenumber.android'格式化和验证电话号码。当我运行应用程序时它工作正常。
我写了两个测试,但是两个测试都因Null Pointer异常而失败。无法弄清楚为什么会有例外。
我在这里做了什么根本错误吗?您的建议非常感谢。
这是抛出空指针异常的方法。
private static Phonenumber.PhoneNumber getPhoneNumberObj(final String phone, final String code, PhoneNumberUtil phoneNumberUtil){
Phonenumber.PhoneNumber phoneNumberObj = null;
try {
String isoCode = phoneNumberUtil.getRegionCodeForCountryCode(Integer.parseInt(code));
/**THIS IS WHERE THERE IS A NULL POINTER EXCEPTION**/
phoneNumberObj = phoneNumberUtil.parse(phone, isoCode);
} catch (Exception e) {
Log.e(TAG, "Phone parsing error", e);
}
return phoneNumberObj;
}
这是完整的代码。
验证员类
导入和方法
import io.michaelrocks.libphonenumber.android.PhoneNumberUtil;
import io.michaelrocks.libphonenumber.android.Phonenumber;
public static boolean validatePhone(final String phone, final String code, Context context) {
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.createInstance(context);
Phonenumber.PhoneNumber phoneNumber = null;
try{
phoneNumber = getPhoneNumberObj(phone, code, phoneNumberUtil);
}
catch (Exception e){
Log.d(TAG, e.getMessage());
}
return phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber);
}
public static String getFormattedPhoneNumber(final String phone, final String code, Context context) {
String formatedPhoneNumber = "";
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.createInstance(context);
Phonenumber.PhoneNumber phoneNumber = null;
try {
phoneNumber = getPhoneNumberObj(phone, code, phoneNumberUtil);
if(phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)){
formatedPhoneNumber = phoneNumberUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
}
} catch (Exception e) {
Log.e(TAG, "Phone parsing error", e);
}
return formatedPhoneNumber;
}
private static Phonenumber.PhoneNumber getPhoneNumberObj(final String phone, final String code, PhoneNumberUtil phoneNumberUtil){
Phonenumber.PhoneNumber phoneNumberObj = null;
try {
String isoCode = phoneNumberUtil.getRegionCodeForCountryCode(Integer.parseInt(code));
phoneNumberObj = phoneNumberUtil.parse(phone, isoCode);
} catch (Exception e) {
Log.e(TAG, "Phone parsing error", e);
}
return phoneNumberObj;
}
我的单元测试
@RunWith(MockitoJUnitRunner.class)
public class ValidatorTest {
@Mock
Context mMockContext;
private final String VALID_PHONE_NUMBER = "07455658798";
private final String VALID_CODE = "+44";
private final String VALID_FORMATTED_PHONE_NUMBER = "+447455658798";
@Test
public void validatePhone() throws Exception {
assertThat(Validator.validatePhone(VALID_PHONE_NUMBER, VALID_CODE, mMockContext), is(true));
}
@Test
public void getFormattedPhoneNumber() throws Exception {
String result = Validator.getFormattedPhoneNumber(VALID_PHONE_NUMBER, VALID_CODE, mMockContext);
assertThat(result, is(VALID_FORMATTED_PHONE_NUMBER));
}
}