2016-08-09 5 views
2

json에서 경도와 위도를 가져 와서 Google지도에서 마커를 표시하고 싶습니다. AsyncTask에서 마커를 사용하면 지정된 latlng에서 마커를 표시하지 않습니다. ... 내가 예를 들어, GitHub의 에 주어진 코드 시도가이 질문에 대한json에서 경도와 위도를 가져 와서 Google지도에 마커를 표시하려고합니다

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

    } 

}} 

bardata.java

public class Bardata { 


private String barname; 
private double longitude; 
private double latitude; 

public double getLongitude() { 
    return longitude; 
} 

public void setLongitude(double longitude) { 
    this.longitude = longitude; 
} 

public double getLatitude() { 
    return latitude; 
} 

public void setLatitude(double latitude) { 
    this.latitude = latitude; 
} 


public String getBarname() { 
    return barname; 
} 

public void setBarname(String barname) { 
    this.barname = barname; 
}} 

답변

0

.... 여기에 사전에 지금까지 ... 감사 해요 this

0

당신은 당신이

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); 
    } 
    } 
}); 
} 
+0

brother..it는 로그 캣에 오류가 없습니다 또는 아무것도 – Abhi

+0

을 표시하지 않습니다 runOnUiThread 내에서 마커를 추가 할 메소드를 호출 할 필요가 있으므로, UI 스레드에서 마커를 추가 할 필요가 경고하지만 마커가 나타나지 않습니다. – Abhi

+0

맵이 초기화되는 동일한 위치에 추가되는 마커가 있습니까? onMapReady 메소드에서지도를 시드니로 이동합니다. – Joyson

관련 문제