2012-10-27 101 views
0

沒有得到JSON數據到MapView的展示位置,但得到的空白地圖, 我正在在我試圖獲取JSON數據到MapView的一個節目,但每當我跑我的應用程序越來越地圖沒有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" 
} 
] 
} 
+0

正在顯示您的地圖嗎?總之沒有得到JSON數據 –

+0

可以查看地圖,但不能位置 – Stanley

+0

請人告訴我 – Stanley

回答

0

我不確定你在哪裏SimpleItemizedOverlay,但我假設它是一個擴展了ItemizedOverlay的自定義實現。如果是這樣,你能否提供該來源?

沒有SimpleItemizedOverlay源我的建議是:

  • 驗證你在你的itemizedOverlay它的構造函數中調用populate()
  • itemizedOverlay被實例化後立即將mapOverlays.add(itemizedOverlay);移動到您的onCreate方法中。在當前位置,重疊將在隨後的ASyncTask運行中重新添加。
  • onPostExecute呼叫itemizedOverlay.populate()然後mapView.postInvalidate()強制刷新

否則我想補充調試消息SimpleItemizedOverlay來驗證是否被正確添加的JSON數據,但是不來源,我不能提供一個例子。

+0

LWCoder,我們可以談談....嗎? – Stanley