【问题标题】:Getting json latitude and longitude in android map在android地图中获取json纬度和经度
【发布时间】:2016-03-31 09:45:56
【问题描述】:

我在这里使用地图成功地从 json Web 服务获取纬度、经度和其他详细信息,但是在地图中显示时只有一个标记显示其他纬度、经度和标记未在地图中显示

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")));

    }
}

我不知道我应该在哪里进行更改,请帮助我

【问题讨论】:

  • 你试过我的解决方案了吗?

标签: android google-maps android-mapview


【解决方案1】:

你需要这样做:

您的代码有什么问题:您在 PostExecute() 上添加单个 lat long,而不是在 for 循环中为所有 LatLng 添加代码。

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();
        }

    }
}

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    好的,您的代码中的 JSON 函数是什么?

    无论如何,您想要做的是,在 post execute 方法中使用具有来自 api 响应的 lat long 值的 jsonArray 并遍历到数组的末尾。现在对于每次迭代,调用地图上的 addMarker,并使用该迭代的 lat long 值。

    这种方式可确保您为相应的纬度和经度添加不同的标记。

    您当前所做的只是在地图上添加一次标记,尽管您从响应中获取了所有 lat long 值。

    这是sn-p:

        @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 希望你能得到你所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多