0
votes

I'm working on a project which calls to a remote server for data. Server gives latitude, longitude and some information. I can able to make call to server and get the response. But i'm not getting how to extract data from that response and plot markers on map.

here is my code

public class NearActivity extends Activity implements LocationListener {

GoogleMap gMap;
private LocationManager locationManager;
private String provider;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_near);
    gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
            .getMap();

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    if (location != null) {

        new HttpGetTask().execute();

        gMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                location.getLatitude(), location.getLongitude()), 14));

        gMap.addMarker(new MarkerOptions()
                .position(
                        new LatLng(location.getLatitude(), location
                                .getLongitude())).title("I'm here"));
    }

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    locationManager.requestLocationUpdates(provider, 400, 1, this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.near, menu);
    return true;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Disabled provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

private class HttpGetTask extends AsyncTask<Void, Void, String> {

    Double lat = locationManager.getLastKnownLocation(provider)
            .getLatitude();
    Double lng = locationManager.getLastKnownLocation(provider)
            .getLongitude();

    String URL = "http:/?xyz.around_me.json?app_id=test&lat="
            + lat + "&lng=" + lng;

    AndroidHttpClient mClient = AndroidHttpClient.newInstance("");

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

        HttpGet request = new HttpGet(URL);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        try {

            return mClient.execute(request, responseHandler);

        } catch (ClientProtocolException exception) {
            exception.printStackTrace();
        } catch (IOException exception) {
            exception.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {

        if (null != mClient)
            mClient.close();
        Log.v("Response", result);
        // Toast.makeText(getBaseContext(), result,
        // Toast.LENGTH_SHORT).show();

        try {


            JSONArray json = new JSONArray(result);

            for (int i = 0; i < json.length(); i++) {
                JSONObject e = json.getJSONObject(i);
            String point = e.getString("point");
            Log.v("POINT", point);

            String[] point2 = point.split(",");
            double lat1 = Double.parseDouble(point2[0]);
            double lng1 = Double.parseDouble(point2[1]);

            Log.v("LLDN", ""+lat1+"&"+lng1);

            gMap.addMarker(new MarkerOptions().title(e
                    .getString("name")).position(new LatLng(lat1, lng1)));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

}

here is my json response

[
{
point: "77.606706,12.967060",
distance: "1.41",
id: 5686,
ph: "1234",
name: "zxcvb",
LS: " asdfrewrtet"
},
{
point: "77.606706,12.967060",
distance: "1.41",
id: 5686,
ph: "1234",
name: "zxcvb",
LS: " asdfrewrtet"
},
{
point: "77.606706,12.967060",
distance: "1.41",
id: 5686,
ph: "1234",
name: "zxcvb",
LS: " asdfrewrtet"
},
]

Anybody help me to extract data from this response.? If i extract data i can place marker.

1

1 Answers

2
votes

You need to get the data from your JSON object, something like this working example:

@Override
protected void onPostExecute(String result) {

  // Had to create this hard coded JSON result string to have something to test with.
  result = "[ { " +
    "\"point\":\"77.606706,12.967060\"," +
    "\"name\":\"MyMarker\"}]";

  try {
    JSONArray json = new JSONArray(result);

  for (int i = 0; i < json.length(); i++) {
    JSONObject e = json.getJSONObject(i);
    String point = e.getString("point");

    String[] point2 = point.split(",");
    double lat1 = Double.parseDouble(point2[0]);
    double lng1 = Double.parseDouble(point2[1]);

    gMap.addMarker(new MarkerOptions().title(e.getString("name")).position(new LatLng(lat1, lng1)));
  }

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