2016-03-31 9 views
-2

Работаю с картой здесь, я получаю широту, долготу и другие детали из json веб-сервиса успешно, но при отображении на карте только один маркер отображает другую широту, долготу и маркеры не отображаются на картеПолучение json широты и долготы на карте android

class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(getActivity()); 
     mProgressDialog.setTitle("Loading locations..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

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

     e = JSONfunctions 
      .getJSONfromURL("http://beauty.ls.com/webservices/MapStores.php?client_id=1"); 
     Log.d("jsonobject", String.valueOf(e)); 


     try { 
      // Locate the array name in JSON 
      Log.d("second", ""); 
      jsonarray = e.getJSONArray("mapstores"); 
      Log.d("three",""); 
      for (int i = 0; i < jsonarray.length(); i++) { 
       e = jsonarray.getJSONObject(i); 

       store_lat = e.getString("store_latitude"); 
       store_long = e.getString("store_longitude"); 
       store_id = e.getString("store_id"); 
       store_name = e.getString("store_name"); 
       store_address = e.getString("store_address"); 
       store_city = e.getString("store_city"); 
       store_phone = e.getString("store_phone"); 
       store_email = e.getString("store_email"); 
       Log.d("latitude",store_lat); 
       Log.d("longitude",store_long); 

       lat1 = Double.parseDouble(store_lat); 
       lng1 = Double.parseDouble(store_long); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

     mProgressDialog.dismiss(); 

      googleMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)) 
        .title(e.getString("store_id"))); 

    } 
} 

Я не знаю, где я должен сделать изменения, пожалуйста, помогите мне

+0

Вы пробовали мое решение? –

ответ

1

Вы должны сделать это так:

Что случилось с вашим кодом: Вы добавляете одного лата долго на PostExecute() вместо добавление кода для всех LatLng в цикл for.

class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(getActivity()); 
     mProgressDialog.setTitle("Loading locations..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

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

     e = JSONfunctions 
      .getJSONfromURL("http://beauty.ls.com/webservices/MapStores.php?client_id=1"); 
     Log.d("jsonobject", String.valueOf(e)); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

     mProgressDialog.dismiss(); 

     try { 
      // Locate the array name in JSON 
      Log.d("second", ""); 
      jsonarray = e.getJSONArray("mapstores"); 
      Log.d("three",""); 
      for (int i = 0; i < jsonarray.length(); i++) { 
       e = jsonarray.getJSONObject(i); 

       store_lat = e.getString("store_latitude"); 
       store_long = e.getString("store_longitude"); 
       store_id = e.getString("store_id"); 
       store_name = e.getString("store_name"); 
       store_address = e.getString("store_address"); 
       store_city = e.getString("store_city"); 
       store_phone = e.getString("store_phone"); 
       store_email = e.getString("store_email"); 
       Log.d("latitude",store_lat); 
       Log.d("longitude",store_long); 

       lat1 = Double.parseDouble(store_lat); 
       lng1 = Double.parseDouble(store_long); 
       googleMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)) 
        .title(e.getString("store_id"))); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 

    } 
} 

Надеюсь, это поможет вам.

0

Хорошо, что такое JSONфункции в вашем коде?

Anyways, что вы хотите сделать, используйте jsonArray, который имеет длинные значения lat из ответа api в методе post execute и проходит до конца массива. Теперь для каждой итерации вызовите addMarker на карте с длинным значением lat для этой итерации.

Этот способ гарантирует, что вы добавляете разные маркеры для соответствующей широты и долготы.

То, что вы сейчас делаете, добавляет маркер только один раз на карту, хотя вы получаете все длинные значения lat из ответа.

Вот фрагмент кода для этого:

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

     e = JSONfunctions 
      .getJSONfromURL("http://beauty.ls.com/webservices/MapStores.php?client_id=1"); 
     Log.d("jsonobject", String.valueOf(e)); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

     mProgressDialog.dismiss(); 

     try { 
      // Locate the array name in JSON 
      Log.d("second", ""); 
      jsonarray = e.getJSONArray("mapstores"); 
      Log.d("three",""); 
      for (int i = 0; i < jsonarray.length(); i++) { 
       e = jsonarray.getJSONObject(i); 

       store_lat = e.getString("store_latitude"); 
       store_long = e.getString("store_longitude"); 
       store_id = e.getString("store_id"); 
       store_name = e.getString("store_name"); 
       store_address = e.getString("store_address"); 
       store_city = e.getString("store_city"); 
       store_phone = e.getString("store_phone"); 
       store_email = e.getString("store_email"); 
       Log.d("latitude",store_lat); 
       Log.d("longitude",store_long); 

       lat1 = Double.parseDouble(store_lat); 
       lng1 = Double.parseDouble(store_long); 
       googleMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)) 
        .title(e.getString("store_id"))); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 

    } 
} 

Ну, пока я печатал, @hiren уже дал ответ. : P Надеюсь, вы получите то, что вам нужно.

 Смежные вопросы

  • Нет связанных вопросов^_^