FetchJSON - это асинхронная задача, поэтому, когда вы пытаетесь получить доступ к f.getLat()
, она еще не имеет значения, поскольку задача еще не завершена, вам нужно дождаться завершения объекта FetchJSON, прежде чем пытаться получить доступ к получателю getLat()
.,
Я полагаю, что вы, вероятно, можете что-то сделать по этим линиям :
передать карту объекту FetchJSON:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Log.i("", "onMapReady()");
FetchJSON f = new FetchJSON(mMap);
}
и установить маркерв вашем FetchJSON, когда широта и долгота известны:
@Override
protected Void doInBackground(Void... voids) {
....
lat = JO.get("lat").toString();
lng = JO.get("lng").toString();
type = (String) JO.get("type");
// Set the marker here:
double latitude = Double.valueOf(f.getLat());
double longitude = Double.valueOf(f.getLng());
LatLng latlng = new LatLng(latitude,longitude);
mMap.addMarker(new MarkerOptions().position(latlng));
....
}
Или лучше использовать , вероятно, делать это в методе onPostExecute
, который вызывается после метода doInBackground
( См. API здесь ):
LatLng latlng = null;
@Override
protected Long doInBackground(URL... urls) {
...
double latitude = Double.valueOf(f.getLat());
double longitude = Double.valueOf(f.getLng());
latlng = new LatLng(latitude,longitude);
....
}
@Override
protected void onPostExecute(Long result) {
if(latlng != null)
mMap.addMarker(new MarkerOptions().position(latlng));
}
Кроме того, вы неправильно читаете JSON , вы ожидаете JSONArray, когда он на самом деле является JSONObject, сJSONArray внутри.Этот пример работает для JSON, который вы получаете по вашей ссылке:
String data = "{\"server response\":[{\"id\":\"991\",\"name\":\"GPSname\",\"address\":\"GPSaddress\",\"lat\":\"52.948616\",\"lng\":\"-1.169131\",\"type\":\"GPStype\"}]}";
Log.i("TAG", data);
String id, name, address, lat, lng, type;
try {
JSONObject json = new JSONObject(data);
JSONArray serverResponse = json.getJSONArray("server response");
for (int i = 0; i < serverResponse.length(); i++) {
JSONObject JO = (JSONObject) serverResponse.get(i);
id = (String) JO.get("id");
name = (String) JO.get("name");
address = (String) JO.get("address");
lat = JO.get("lat").toString();
lng = JO.get("lng").toString();
type = (String) JO.get("type");
Log.i("TAG", String.format(
"JSON Values: id=%s, name=%s, address=%s, lat=%s, lng=%s, type=%s",
id, name, address, lat, lng, type));
}
} catch (Exception e) {
Log.e("TAG", "exception", e);
}
Распечатывает
JSON Values: id=991, name=GPSname, address=GPSaddress, lat=52.948616, lng=-1.169131, type=GPStype