1

BroadcastReceiver を拡張します。

 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
        }
    }
 }

ユーザーの 1 人から ACRA を使用して次のクラッシュ レポートを受け取りました (したがって、このエラーを繰り返すことはできません)。

"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)"

そのため、31 行目に NullPointerException があります。

if (phoneNumber.equals(minutes)) {

私が理解しているように、文字列の1つphoneNumberまたはminutesnullです。そしてintent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)、私の場合はnullにすることはできません(または間違っていますか?)。長さ 4 または 5 のシンボルがあると仮定しcurrentTimeStringます (たとえば、1:45 または 20:54 を返すため)。おそらくその理由は、このエラーに遭遇したユーザーがロケール en_PK (パキスタン - 私が思うに) を持っており、奇妙な形式で時間を返すためですが、私が見るように、奇妙なことは何もないDateFormat.getTimeInstanceはずです...

何が原因NullPointerExceptionですか?

4

1 に答える 1

0

確かphoneNumberにnullです。これを行うString.equals(null)とfalseが返されるだけです。ドキュメントによると、 の受信者は、ACTION_NEW_OUTGOING_CALL呼び出しが想定されていない場合 (ペアレンタル コントロール アプリなど) に null を設定するなど、番号を変更できます。つまり、受信者が無効化された番号を取得したということです。

ところで@Puruが述べたように、分を抽出する方法はお勧めできません。

于 2013-02-12T14:14:46.953 に答える