android - 有时,在响应接收器中再次启动服务时, Intent 服务崩溃

标签 android

有时,当我在 onReceive() 方法上再次重新启动 Intent 服务时,我会遇到这个问题。 这是我的堆栈跟踪。

"java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.Intent.getComponent()' on a null object reference at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1207) at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1238) at android.app.ContextImpl.startService(ContextImpl.java:1222) at android.content.ContextWrapper.startService(ContextWrapper.java:581) at com.live.wheelz.MapFragmentPassenger$ResponseReceiver$3.run(MapFragmentPassenger.java:3162) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) " Here is my code

    public class ResponseReceiver extends WakefulBroadcastReceiver {
        public static final String ACTION_RESP = "com.live.ResponseReceiver.intent.action.MESSAGE_PROCESSED";

        @Override
        public void onReceive(Context context, Intent intent) {
            if(!intent.getStringExtra("journeyState").equals("jr_droped") && !intent.getStringExtra("journeyState").equals("jr_canceled") ) {
                if(intent.getStringExtra("journeyState").equals("jr_arrived") && alertCounter==0) {
                    alertCounter=alertCounter+1;
                    popUp.dismisDialog();
                    soundAlert.initRigtone("Driver is arrived at your location");
//                    snack("Driver is arrived at your location","message","long");


                }
                if (sharedData.getisSimulation() == true) {
                    if (intent.getBooleanExtra("same", true) == false) {
                        double latc = intent.getDoubleExtra("pDriverLatitude", 0.0);
                        double lonc = intent.getDoubleExtra("pDriverLongitude", 0.0);
                        //dname.setText("Latitude:"+lat+"Longitude:"+lon);
                        if (driver != null) {
                            driver.remove();
                        }
                        //String address=getaddress(latpickup,lonpickup);
                        for (Marker oc : nearest_driver) {
                            oc.remove();
                        }
                        driver = googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(latc, lonc))
                                .title("Current location Driver").icon(BitmapDescriptorFactory.fromResource(R.drawable.bike_left))
                                .draggable(true));
                        if (markerlocation != null) {
                            markerlocation.remove();

                        }
                        markerlocation = googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(sharedData.getnewlat(), sharedData.getnewlon()))
                                .title("Passenger Current Location").icon(BitmapDescriptorFactory.fromResource(R.drawable.bluedot)));
                        if (sharedData.getisRating() == false) {
                            Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        startService(servicedriver);
                                    }
                                    catch (Exception ex)
                                    {
                                        System.out.print("");
                                    }
                                }
                            }, sharedData.getPassenger_request_delay_time());
                        }

                    }
                    if (intent.getBooleanExtra("same", false) == true) {
                        if (markerlocation != null) {
                            markerlocation.remove();

                        }
                        markerlocation = googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(sharedData.getnewlat(), sharedData.getnewlon()))
                                .title("Passenger Current Location").icon(BitmapDescriptorFactory.fromResource(R.drawable.bluedot)));
                        if (sharedData.getisRating() == false) {
                            if (receiver != null) {
                                Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        try {
                                            startService(servicedriver);
                                        }
                                        catch (Exception ex)
                                        {
                                            System.out.print("");
                                        }
                                        //startService(servicedriver);
                                    }
                                }, sharedData.getPassenger_request_delay_time());
                            }
                        }
                    }
                }
                if (sharedData.getisSimulation() == false) {

                    if (intent.getBooleanExtra("same", false) == false) {
                        if (intent.getBooleanExtra("connection_error", false) == false) {
                            latc = intent.getDoubleExtra("pDriverLatitude", 0.0);
                            lonc = intent.getDoubleExtra("pDriverLongitude", 0.0);
                            //snack("Driver Current lat:"+latc+" Driver Current lon:"+lonc, "message", " ");
                            //Ali Abbas Location Diffrnce Calc
                            double latDrvr = sharedData.getPickuplocationlat();
                            double lonDrvr = sharedData.getPickuplocationlon();
                            double distanceDiff = getDistanceInMiles(latc,lonc,latDrvr,lonDrvr);
                            double getDisrnce = sharedata.getDrvrPsngrRnge() ;
                            if(distanceDiff <= sharedata.getDrvrPsngrRnge() && intent.getStringExtra("journeyState").equals("jr_driverAccepted")) {
                                /*if (!ISPOPUPED) {
                                     ISPOPUPED =true ;*/
                                     fncDrvrArndPsngr();
                                //}
                            }else if(distanceDiff > sharedata.getDrvrPsngrRnge() && intent.getStringExtra("journeyState").equals("jr_driverAccepted")){
                                fncDrvrArndPsngrPopUpDismiss();
                            }
                            //Ali Abbas Distance Calc Ends
                        }
                        smoothly(latc, lonc);

                        if (sharedData.getisRating() == false) {
                            if (intent.getBooleanExtra("connection_error", true) == true) {
                                snack("Internet Connection Error", "message", " ");
                                fncDrvrArndPsngrPopUpDismiss();
                            } else {
                                AppAsynTaskAddress setaddress = new AppAsynTaskAddress(MapFragmentPassenger.this, latc, lonc, "driverlocation", false);
                                setaddress.execute();
                                //snack("Driver Arrived at:"+pickuplocationtext.getText().toString(), "message", " ");
                            }
                            if (receiver != null) {
                                Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        try {
                                            startService(servicedriver);
                                        }
                                        catch (Exception ex)
                                        {
                                            System.out.print("");
                                        }
                                        //startService(servicedriver);
                                    }
                                }, sharedData.getPassenger_request_delay_time());//sharedData.getPassenger_request_delay_time()
                            }
                        } else {
                            googleMap.clear();

                        }


                    }
                    if (intent.getBooleanExtra("same", true) == true) {
                        if (sharedData.getisRating() == false) {
                            //snack("Same lat lon", "message", " ");
                            if (receiver != null) {
                                Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        try {
                                            startService(servicedriver);
                                        }
                                        catch (Exception ex)
                                        {
                                            System.out.print("");
                                        }
                                       // startService(servicedriver);
                                    }
                                }, sharedData.getPassenger_request_delay_time());//sharedData.getPassenger_request_delay_time()
                            }
                        } else {
                            googleMap.clear();

                        }

                    }
                }
            }
            if(intent.getStringExtra("journeyState").equals("jr_droped")) {
                if(!sharedata.isOnRatingScreen()) {
                    Intent intSetPass = new Intent(MapFragmentPassenger.this, Ratingscreenpassenger.class);
                    intSetPass.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intSetPass);
                }

            }

            if(intent.getStringExtra("journeyState").equals("jr_canceled")) {
                sharedata.setJmode(false);
                sharedata.setisRating(true);
                //db.deleteBillingParameter();
                db.deleteJourneyRating(sharedata.getDriver_rquested_journeyid(), "p");
                changebutton();
                snack("Journey Canceled","message","long");
                soundAlert.initRigtone("Journey Canceled");
            }

            }


        }

最佳答案

我在做了一些调试后解决了这个问题 startService(servicedriver); servicedriver 对象为 null,如果它为 null,我会再次启动它,例如

if(servicedriver!=null) {
                                            startService(servicedriver);
                                        }
                                        else{
                                            startservice();
                                        }

这里启动服务

public void startservice() {
    if (sharedData.getisSimulation() == true) {
        jmode = true;
        sharedData.setisRating(false);
        servicedriver = new Intent(this, LocationService.class);
        this.startService(servicedriver);
        sharedData.setJmode(true);
    }
    if (sharedData.getisSimulation() == false) {
        jmode = true;
        sharedData.setisRating(false);
        servicedriver = new Intent(this, LocationServiceDriver.class);
        this.startService(servicedriver);
        sharedData.setJmode(true);
    }
}

关于android - 有时,在响应接收器中再次启动服务时, Intent 服务崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40483130/

相关文章:

java - 提高 Android 位图上 getpixel() 和 setpixel() 的速度

android - 在菜单选项项中设置我自己的单选按钮颜色

android - 每个命令的 adb shell "operation not permitted"

android - 应用无法安装 : CertPath not validated: null

java - kotlin 编译器找不到生成的 java 源代码

android - 如何将异步任务的结果返回到android中的 Activity ?

Android - 使用 CommonWare 的 locpoller 时出现问题

java - 存储和搜索大量字符串的最有效方式

java - 将文本从 editText 发送到 ListView(2 个 Activity )

android - 横向 SW 键盘上面没有文本字段吗?