2013-02-12 5 views
1

내가 브로드 캐스트 리시버 확장 :NullPointerException이

내 사용자 중 하나에서 ACRA를 사용하여 충돌 보고서 다음있어
public class MyBroadcast extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     if (null == bundle) 
      return; 
     String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     String currentTimeString = DateFormat.getTimeInstance(DateFormat.SHORT).format(new Date()); 
     int a = 2; 
     if (currentTimeString.length() == 5) { 
      a = 3; 
     } 
     String minutes = currentTimeString.substring(a); 
     if (phoneNumber.equals(minutes)) { 
      //some code 
     } 
    } 
} 

(그래서,이 오류를 반복 할 수 없습니다) :

"java.lang.RuntimeException: Unable to start receiver myapp.service.MyBroadcast: java.lang.NullPointerException 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2144) 
    at android.app.ActivityThread.access$2400(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1114) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:4389) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at myapp.service.MyBroadcast.onReceive(MyBroadcast.java:31) 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2103) 
    ... 10 more 
java.lang.NullPointerException 
    at myapp.service.MyBroadcast.onReceive(MyBroadcast.java:31) 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2103) 
    at android.app.ActivityThread.access$2400(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1114) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:4389) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
    at dalvik.system.NativeStart.main(Native Method)" 

if (phoneNumber.equals(minutes)) { 

나는 스트 중 하나 알고있는 것처럼 :

그래서, 라인 (31)에 NullPointerException가있다 ngs phoneNumber 또는 minutes이 null입니다. 그리고 내가 깨달은 것처럼 intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)은 내 경우에 null이 될 수 없다. currentTimeString에는 길이가 4 또는 5 기호가 있다고 가정합니다 (예 : 1:45 또는 20:54를 반환하기 때문). 내가 nothing strange이 있어야한다 참조로

은 무엇이 NullPointerException의 원인이 ... - (내가 생각하는 파키스탄)와 이상한 형식으로 DateFormat.getTimeInstance 반환 시간,하지만 어쩌면 이유는이 오류를 만난 사용자는 로케일 en_PK이있다인가?

+0

당신은 당신의 매니 페스트 파일에있는 OUTGOING CALL에 대한 허가를 설정 했습니까? –

+0

@Puru 물론) android.permission.PROCESS_OUTGOING_CALLS' – janot

+1

나는 그것을 시도하지 않고 정확하게 말할 수는 없지만 IMHO에서는 "부분 문자열"접근 방식을 사용해서는 안된다. SimpleDateFormat으로 이동하십시오. http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html .. –

답변

0

확실하게 phoneNumber이 null 인 것은 String.equals(null)이 false를 반환하기 때문입니다. documentation에 따르면 ACTION_NEW_OUTGOING_CALL의 수신자는 번호가 수정 될 수 있습니다 (예 : 자녀 보호 앱). 따라서 사용자의 경우라고 가정합니다. 즉 수신자가 무효화 된 번호를 얻었습니다.

@Puru가 언급했듯이 분을 추출하는 방법은 권장하지 않습니다.