Получава се карта, но без json данни

Не получавам JSON данни в mapview за показване на местоположения, но получавам празна карта, правя програма, в която се опитвам да извлека json данни в mapview, но когато стартирам приложението си, получавам карта без JSON данни, така че, моля, вижте какво е проблем и какви са промените, които трябва да направя, тук поставям моя код, моля, вижте: -

public class MapView extends MapActivity {

public GeoPoint point;
TapControlledMapView mapView; // use the custom TapControlledMapView
List<Overlay> mapOverlays;
Drawable drawable;
SimpleItemizedOverlay itemizedOverlay;

@Override
public void onCreate(final Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_view);

    mapView = (TapControlledMapView) findViewById(R.id.viewmap);
    mapView.setBuiltInZoomControls(true);
    mapView.setSatellite(false);

//   new DownloadWebPageTask().execute();


    // dismiss balloon upon single tap of MapView (iOS behavior) 
    mapView.setOnSingleTapListener(new OnSingleTapListener() {      


        public boolean onSingleTap(MotionEvent e) {
            itemizedOverlay.hideAllBalloons();
            return true;

        }
    });

    mapOverlays = mapView.getOverlays();        
    drawable = getResources().getDrawable(R.drawable.ic_launcher);
    itemizedOverlay = new SimpleItemizedOverlay(drawable, mapView);         
    itemizedOverlay.setShowClose(false);
    itemizedOverlay.setShowDisclosure(true);
    itemizedOverlay.setSnapToCenter(false);



    class DownloadWebPageTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            HttpClient client = new DefaultHttpClient();
            // Perform a GET request for a JSON list
            HttpUriRequest request = new HttpGet("https://dl.***.com/maps.json");
            // Get the response that sends back
            HttpResponse response = null;
            try {
                response = client.execute(request);
            } catch (ClientProtocolException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            // Convert this response into a readable string
            String jsonString = null;
            try {
                jsonString = StreamUtils.convertToString(response.getEntity().getContent());
            } catch (IllegalStateException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            // Create a JSON object that we can use from the String
            JSONObject json = null;
            try {
                json = new JSONObject(jsonString);
            } catch (JSONException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }


            try{
                JSONArray jsonArray = json.getJSONArray("maps");
                Log.e("log_tag", "Opening JSON Array ");
                for(int i=0;i < jsonArray.length();i++){                      
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String latitude =  jsonObject.getString("latitude");
                    String longitude =  jsonObject.getString("longitude");
                    String title =  jsonObject.getString("title");
                    String country = jsonObject.getString("country");
                    double lat = Double.parseDouble(latitude);
                    double lng = Double.parseDouble(longitude);
                    Log.e("log_tag", "ADDING GEOPOINT"+title); 
                    point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
                    OverlayItem overlayItem = new OverlayItem
                        (point, title, country);
                    itemizedOverlay.addOverlay(overlayItem);
               }
           }catch(JSONException e)        {
               Log.e("log_tag", "Error parsing data "+e.toString());
           } 


           return jsonString;
       }

           @Override
        protected void onPostExecute(String result) {
                    itemizedOverlay.populateNow(); 

           mapOverlays.add(itemizedOverlay);
           if (savedInstanceState == null) {
               MapController controller = mapView.getController();
               controller.setCenter(point);
               controller.setZoom(7);
           } else {
               // example restoring focused state of overlays
               int focused;
               focused = savedInstanceState.getInt("focused_1", -1);
               if (focused >= 0) {
                   itemizedOverlay.setFocus(itemizedOverlay.getItem(focused));
               }
           }
              }

    }

    }
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

    }

JSON данни

{
"maps": [
{

"title": "Place One",
"latitude" : "46.483742",
"longitude" : "7.663157",
"country": "Switzerland"
},
{
"title" : "Place Two",
"latitude" : "59.25235",
"longitude" : "18.465536",
"country" : "Sweden"
},
{
"title" : "Place Three",
"latitude" : "56.404182",
"longitude" : "-3.818855",
"country" : "Scotland"
}
]
}

person Stanley    schedule 27.10.2012    source източник
comment
вашата карта се показва или не?   -  person Kailash Dabhi    schedule 27.10.2012
comment
може да преглежда карта, но не и местоположения, накратко, не получава json данни   -  person Stanley    schedule 27.10.2012
comment
@Stanley решихте ли вашия AsyncTask въпрос?   -  person Hardik Joshi    schedule 27.10.2012


Отговори (1)


Не съм сигурен къде получавате SimpleItemizedOverlay, но предполагам, че това е персонализирана реализация, разширяваща ItemizedOverlay. Ако е така, бихте ли предоставили и този източник?

Без източника SimpleItemizedOverlay моите предложения биха били:

  • Уверете се, че извиквате populate() на вашия itemizedOverlay в рамките на неговия конструктор.
  • Преместете mapOverlays.add(itemizedOverlay); във вашия onCreate метод веднага след като itemizedOverlay бъде създаден. В текущата си позиция наслагването се добавя отново при следващи изпълнения на ASyncTask.
  • В рамките на onPostExecute извикайте itemizedOverlay.populate() и след това mapView.postInvalidate() за принудително опресняване

В противен случай бих добавил съобщения за отстраняване на грешки към SimpleItemizedOverlay, за да проверя дали JSON данните се добавят правилно, но без този източник не мога да дам пример.

person LWCoder    schedule 27.10.2012