Java 我想通过从json获取经度和纬度来在google地图上显示标记

Java 我想通过从json获取经度和纬度来在google地图上显示标记,java,android,json,google-maps,google-maps-api-3,Java,Android,Json,Google Maps,Google Maps Api 3,我想通过从json获取经度和纬度来在google地图上显示标记。如果我在AsyncTask中使用标记,它就不会在给定的纬度上显示标记。。。 到目前为止,我在这里……提前谢谢 public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; String city = "New Delhi"; String location = null; doub

我想通过从json获取经度和纬度来在google地图上显示标记。如果我在AsyncTask中使用标记,它就不会在给定的纬度上显示标记。。。 到目前为止,我在这里……提前谢谢

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
String city = "New Delhi";
String location = null;
double lat;
double lng ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);


    new JSONTask().execute("http://www.xxxxxxx.com/bar/mob.php");
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng latLng = new LatLng(-30, 140);
    mMap.addMarker(new MarkerOptions().position(latLng).title("Marker"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    // i want use that lat and lng here which i am getting in AsyncTask
    LatLng latLng1 = new LatLng(lat, lng);
    mMap.addMarker(new MarkerOptions().position(latLng1).title("Marker"));
    mMap.setMyLocationEnabled(true);
}

private class JSONTask extends AsyncTask<String, String, List<Bardata>> {

    @Override
    protected List<Bardata> doInBackground(String... params) {

        HttpURLConnection connection = null;
        BufferedReader reader = null;


        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(10000);
            connection.setConnectTimeout(15000);
            connection.setRequestMethod("POST");
            connection.setDoInput(true);
            connection.setDoOutput(true);

            Uri.Builder builder = new Uri.Builder()
                    .appendQueryParameter("location", location)
                    .appendQueryParameter("city", city);
            String query = builder.build().getEncodedQuery();


            OutputStream os = connection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(query);
            writer.flush();
            writer.close();
            os.close();
            connection.connect();
            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();

            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            String finalJson = buffer.toString();
            System.out.println("Returned value " + finalJson.toString());

            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("home");

            List<Bardata> bardataList = new ArrayList<>();
            Gson gson = new Gson();
            for (int i = 0; i < parentArray.length(); i++) {


                JSONObject finalObject = parentArray.getJSONObject(i);
                Bardata barData = gson.fromJson(finalObject.toString(), Bardata.class);
                bardataList.add(barData);


                lat = barData.getLatitude();
                lng = barData.getLongitude();

               /* LatLng latLng1 = new LatLng(lat, lng);
                mMap.addMarker(new MarkerOptions().position(latLng1).title("Marker"));
                mMap.setMyLocationEnabled(true);*/



            }
            return bardataList;


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected void onPostExecute(final List<Bardata> result) {
        super.onPostExecute(result);
        if (result != null) {

        } else {
            Toast.makeText(getApplicationContext(), "Currently,we are not present in your city", Toast.LENGTH_SHORT).show();
        }

    }

}}

对于这个问题,github上给出了示例代码
请尝试

您需要在UI线程上添加标记,因此需要调用该方法从runOnUiThread中添加标记

for (int i = 0; i < parentArray.length(); i++) {


 JSONObject finalObject = parentArray.getJSONObject(i);
 Bardata barData = gson.fromJson(finalObject.toString(), Bardata.class);
 bardataList.add(barData);


 lat = barData.getLatitude();
 lng = barData.getLongitude();
 LatLng latLng1 = new LatLng(lat, lng);

 runOnUiThread(new Runnable() {
  public void run() {
   try {

    mMap.addMarker(new MarkerOptions().position(latLng1).title("Marker"));
    mMap.setMyLocationEnabled(true);

   } catch (JSONException e) {
    Log.e(LOG_TAG, "Error adding marker", e);
   }
  }
 });
}
for(int i=0;i
logcat没有错误或警告,但没有显示标记。正在添加的标记是否与正在初始化地图的位置相同?在onMapReady方法中,您将地图移动到悉尼。
for (int i = 0; i < parentArray.length(); i++) {


 JSONObject finalObject = parentArray.getJSONObject(i);
 Bardata barData = gson.fromJson(finalObject.toString(), Bardata.class);
 bardataList.add(barData);


 lat = barData.getLatitude();
 lng = barData.getLongitude();
 LatLng latLng1 = new LatLng(lat, lng);

 runOnUiThread(new Runnable() {
  public void run() {
   try {

    mMap.addMarker(new MarkerOptions().position(latLng1).title("Marker"));
    mMap.setMyLocationEnabled(true);

   } catch (JSONException e) {
    Log.e(LOG_TAG, "Error adding marker", e);
   }
  }
 });
}