java.lang.NullPointerException при нажатии на наложение на карте - PullRequest
0 голосов
/ 16 сентября 2011

Я извлекаю долготу и широту из веб-службы и показываю результаты (маркеры) на карте Google ... но иногда я получаю следующую ошибку ... приложение принудительно закрывается ...... КакМогу ли я решить / справиться с этим ..?Предложения приветствуются ...

       09-16 14:51:41.359: ERROR/AndroidRuntime(27858): java.lang.NullPointerException
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:679)
       09-16 14:51:41.359: ERROR/AndroidRuntime(27858):     at android.view.View.dispatchTouchEvent(View.java:3932)

Мой код для отображения наложений:

          class backgroundLoadResults extends
AsyncTask<Void, Void, Void> {
      Handler mHandler = new Handler(Looper.getMainLooper());
      String message = null;
      double mylat = 0 ,mylon = 0;

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        //getListView().addHeaderView(buildHeader());
        dialog.dismiss();
        if(markerssList.getLatitude().size() < 0 ||markerssList.getLatitude().size() == 0 )
        {
            AlertDialog.Builder alertbox = new AlertDialog.Builder(SActivity.this);
            alertbox.setMessage("No result found..Please try later..");
            alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                }
            });
            alertbox.show();
        }
        tb2.setEnabled(true);
        super.onPostExecute(result);


    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
         mHandler.post(new Runnable() {
              public void run() {
                  dialog = ProgressDialog.show(SActivity.this, "", 
                        "Showing the results,Please wait...", true);
                dialog.show();
              }
         });
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgress(progress[0]);
    }


    @Override
    protected Void doInBackground(Void... params) {

        // TODO Auto-generated method stub
        geocoder = new Geocoder(SActivity.this); //<3>
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if ( !locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER ) ) {
            //buildAlertMessageNoGps();
        }


        if (location != null) 
        {
            message = String.format("\n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude());
            mylat = location.getLatitude() ;
            mylon = location.getLongitude();
        }
        System.out.println(""+mylat+mylon);

            try {

                /** Handling XML */
                SAXParserFactory spf = SAXParserFactory.newInstance();
                SAXParser sp = spf.newSAXParser();
                XMLReader xr = sp.getXMLReader();
                //               mylat = -33.853468 ;
                //              mylon = 150.94042160000004;
                item = spinner.getSelectedItemPosition();   

                int radi = 0;
                if(item == 1)
                {radi = 5;}
                if(item == 2)
                {radi = 10155;}
                if(item == 3)
                {radi = 10155;}

                System.out.println("just above the urll"+mylat+mylon);
                /** Send URL to parse XML Tags */
                URL sourceUrl = new URL("XXXXXXXXXXXXXXXXXXX?lat="+mylat+"&lng="+mylon+"&radius="+radi);
                System.out.println(" the urll  "+sourceUrl);
                /** Create handler to handle XML Tags ( extends DefaultHandler ) */
                myXMLHandler = new MyXMLHandler();
                xr.setContentHandler(myXMLHandler);
                xr.parse(new InputSource(sourceUrl.openStream()));

            } 

            catch (Exception e) {



            }

            markerssList = MyXMLHandler.markerList;


            System.out.println("lenghttttt"+markerssList.getLatitude().size());
            Drawable drawable = ShowroomLocatorActivity.this.getResources().getDrawable(R.drawable.icon);
            CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable, ShowroomLocatorActivity.this);

            for (int i = 0; i < markerssList.getLatitude().size(); i++) {

                // **Is this correct??**
                ss1 = markerssList.getLatitude().get(i);
                ss2 = markerssList.getLongitude().get(i);
                ss3 = markerssList.getName().get(i);
                ss4 = markerssList.getAddress().get(i);
                ss5 = markerssList.getCity().get(i);
                System.out.println("lat...."+ ss1);
                System.out.println("llogitude......."+ ss2);
                Log.i("latitude..." + i, ss1);
                Log.i("longitude.."+i,ss2);

                {  

                    p = new GeoPoint((int) (Double.parseDouble(ss1) * 1E6),
                            (int) (Double.parseDouble(ss2) * 1E6));
                    OverlayItem overlayItem = new OverlayItem(p, " ", 
                            ""+ss3+"\n"+ss4+"\n"+ss5);
                    itemizedOverlay.addOverlay(overlayItem);
                    //mapController.animateTo(p);
                    //mapController.setZoom(17);
                }
                catch(Exception e1)
                {System.out.println("newwww"+e1);}

            }

            mapView.getOverlays().add(itemizedOverlay);
            mapController = mapView.getController();
            mapController.animateTo(p);
            mapController.setZoom(10);
            mapView.postInvalidate(); 



        return null;
    }

}

}

Мой метод onTap для наложения:

       protected boolean onTap(int index) {
        OverlayItem item = mapOverlays.get(index);
        AlertDialog.Builder dialog = new AlertDialog.Builder(context);

        dialog.setTitle(item.getTitle());
        dialog.setMessage(item.getSnippet());
        dialog.setIcon(R.drawable.icon);
        dialog.setNegativeButton("go to direction", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int id) {
                System.out.println("get directions..."+ss4+ss5);


            } });
        dialog.setNeutralButton("buisness card", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int id) {

                //...

            } });

        //dialog.setPositiveButton("Get Direction", this);
        dialog.show();
        return true;
    }

Ответы [ 2 ]

1 голос
/ 29 сентября 2012

Вы можете просто попробовать это:

if(testingMapsItemizedOverlay.size > 0)
overlays.add(testingMapsItemizedOverlay);
1 голос
/ 01 марта 2012

У меня точно такая же ошибка; при прикосновении к карте.

причина; Я обнаружил отсутствие хотя бы одного оверлайта в массиве.

Возможно, вам потребуется добавить элемент оверлея по умолчанию в коллекцию itemizedOverlay. Проверьте, где вы инициализируете свой класс, и попробуйте сделать что-то вроде этого.

overlays = mapV.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.someicon);
Test1ItemizedOverlay testingMapsItemizedOverlay = new Test1ItemizedOverlay(drawable, this);
GeoPoint point = new GeoPoint(55791764,12377150);
OverlayItem overlayitem = new OverlayItem(point, "First overlay item!", "Here, I am!");
testingMapsItemizedOverlay.addOverlay(overlayitem);
overlays.add(testingMapsItemizedOverlay);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...