2011-11-28 2 views
2

내가 응용 프로그램을 열 때 내 전화 번호를 표시 할,하지만 응용 프로그램 전화는 (가) 예기치 않게 중지안드로이드 전화 번호

라는 예외를 얻을. 다시 시도하십시오.

이미 매니페스트 파일에 Read_Phone_State 권한을 추가했습니다. 그것은 getLine1Number가 null의 반환 가능성이 높습니다

public class Telephone extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     View v = new View(this); 
     v.setTag("The Number is : " + getMyTenDigitsNumber()); 
     setContentView(v); 

    } 

    private String getTelephone() { 
     TelephonyManager tm; 
     tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     return tm.getLine1Number(); 

    } 

    private String getMyTenDigitsNumber() { 
     String s = getTelephone(); 
     return s.substring(3); 
    } 
} 
+0

로그에 무엇이 있습니까? 해당 logcat 항목을 게시하십시오. –

+0

getDefaultSoftwareVersion()으로 getLine1Number()를 변경했으나 응용 프로그램을 강제 종료해야합니다. 이것은 logcat : [링크] (http://i106.photobucket.com/albums/m265/)입니다. Mihaela15/Untitled.png) – Mischaila

답변

1

그래서 이후의 문자열 작업을 던져 NullPointerException (당신이 로그 캣을 통해 확인 할 수 있어야한다). 메서드에 대한 documentation에 따르면 숫자를 사용할 수없는 경우 null을 반환 할 수 있습니다. 공급자가 전화 번호를 SIM에 저장하지 않을 수도 있으므로이 경우 해당 번호는 해당 방법에 사용 가능하지 않을 수 있습니다.

+0

개인 휴대 전화에서 테스트 중이며 logcat에서 알려주는 것은 nullPointException입니다.하지만 내 제공자가이를 보여 주도록하려면 어떻게해야합니까? – Mischaila

+0

공급자가 반환하지 않으면이를 강제로 실행할 수 없습니다. 휴대 전화에서 작동하는 경우에도 다른 공급 업체의 휴대 전화에서 작동한다는 보장은 없습니다. 전화기를 고유하게 식별하기 위해 전화 번호를 사용하는 경우 getDeviceId()를 사용하는 것이 더 낫습니다 – Chris

0

getLine1Number()가 null을 반환 할 수 있으므로 하위 문자열 작업에서 NPE가 throw 될 수 있습니다. getLine1Number()는 SIM 카드가 삽입되어 있지 않거나 숫자가 SIM 카드에 저장되어 있지 않은 경우와 같이 숫자를 사용할 수없는 경우 null을 반환합니다. 설정 -> 전화 정보 -> 상태로 이동하여 전화 번호 필드에 전화 번호가 표시되는지 확인하여 전화 번호를 사용할 수 있는지 확인할 수 있습니다.

+0

감사합니다 Raghav Sood, 알 수없는 번호입니다. :) – Mischaila