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

Не получая данные JSON в представление карты для отображения местоположений, но получая пустую карту, я делаю программу, в которой я пытаюсь извлечь данные JSON в представление карты, но всякий раз, когда я запускаю свое приложение, получаю карту без данных 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