从JSON,Android

时间:2017-03-29 15:28:32

标签: android json google-maps

我试图在从JSON获取数据后自动向地图添加标记,其位置在api中,这就是我所拥有的:

@Override
    protected Void doInBackground(Void... params) {
        HttpHandler sh2 = new HttpHandler();
        final String jsonStrOportunidades = sh2.makeServiceCall(urlOportunidades);
        Log.e(TAG, "Response from URL: " + jsonStrOportunidades);
        if (jsonStrOportunidades != null) {
            try {
                JSONArray array = new JSONArray(jsonStrOportunidades);
                for (int i = 0; i < array.length(); i++) {
                    JSONObject jsonObject = array.getJSONObject(i);
                    String Designacao = jsonObject.getString("Designacao");
                    String Coord_LAT = jsonObject.getString("Coord_LAT");
                    String Coord_LONG = jsonObject.getString("Coord_LONG");

                    HashMap<String, String> oportunidades = new HashMap<>();

                    oportunidades.put("Designacao", Designacao);
                    oportunidades.put("Coord_LAT", Coord_LAT);
                    oportunidades.put("Coord_LONG", Coord_LONG);

                    double lat1 = Double.parseDouble(Coord_LAT);
                    double lng1 = Double.parseDouble(Coord_LONG);

                    mMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)));

                    listaOportunidades.add(oportunidades);
                }
            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Json parsin error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });
            }
        } 
        return null;
    }

“mMap.addMarker”不起作用,是否有可能从那里创建标记?

1 个答案:

答案 0 :(得分:1)

尝试从onPostExecute设置标记。 doInBackground不是更新UI组件的地方。

@Override
protected String doInBackground(Void... params) {
    HttpHandler sh2 = new HttpHandler();
    final String jsonStrOportunidades = sh2.makeServiceCall(urlOportunidades);
    Log.e(TAG, "Response from URL: " + jsonStrOportunidades);

    return jsonStrOportunidades;
}

@Override
protected void onPostExecute(String jsonStrOportunidades){

  if (jsonStrOportunidades != null) {
      try {
          JSONArray array = new JSONArray(jsonStrOportunidades);
          for (int i = 0; i < array.length(); i++) {
              JSONObject jsonObject = array.getJSONObject(i);
              String Designacao = jsonObject.getString("Designacao");
              String Coord_LAT = jsonObject.getString("Coord_LAT");
              String Coord_LONG = jsonObject.getString("Coord_LONG");

              HashMap<String, String> oportunidades = new HashMap<>();

              oportunidades.put("Designacao", Designacao);
              oportunidades.put("Coord_LAT", Coord_LAT);
              oportunidades.put("Coord_LONG", Coord_LONG);

              double lat1 = Double.parseDouble(Coord_LAT);
              double lng1 = Double.parseDouble(Coord_LONG);

              mMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)));

              listaOportunidades.add(oportunidades);
          }
      } catch (final JSONException e) {
          Log.e(TAG, "Json parsing error: " + e.getMessage());
          Toast.makeText(getApplicationContext(), "Json parsin error: " + e.getMessage(), Toast.LENGTH_LONG).show();
      }
  } 

}

此外,您需要像这样更改AsyncTask类

YourAsyncTaskClass extends AsyncTask<String, Void, String>