【问题标题】:How to Modify onMapReady function to mark map from json如何修改 onMapReady 函数以从 json 标记地图
【发布时间】:2017-06-11 05:51:00
【问题描述】:

我在使用 google map android 时遇到问题,我想从 json 中显示我的坐标。 我的 Json :

{"info":[{"nama":"Masjid Agung","0":"Masjid Agung","deskripsi":"tempat sholat umat Isalm","1":"tempat sholat umat Isalm","lng":"106.332725524902","2":"106.332725524902","lat":"-6.23728179931641","3":"-6.23728179931641"},{"nama":"Restoran Bersama","0":"Restoran Bersama","deskripsi":"temapt makan","1":"temapt makan","lng":"106.309807206177","2":"106.309807206177","lat":"-6.23967002769392","3":"-6.23967002769392"},{"nama":"Restoran Cepat saja","0":"Restoran Cepat saja","deskripsi":"enak nih di sini","1":"enak nih di sini","lng":"106.318476105713","2":"106.318476105713","lat":"-6.22431180265454","3":"-6.22431180265454"},{"nama":"Bandara Halim","0":"Bandara Halim","deskripsi":"benarkah tidak ini bandara","1":"benarkah tidak ini bandara","lng":"106.34568443396","2":"106.34568443396","lat":"-6.24939667082029","3":"-6.24939667082029"},{"nama":"Bandara ABC","0":"Bandara ABC","deskripsi":"Ini adalah bandara","1":"Ini adalah bandara","lng":"106.331951523804","2":"106.331951523804","lat":"-6.22013087470731","3":"-6.22013087470731"}]}

这是我的 MainActivity:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

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

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

任何人都可以帮助我如何自定义 onMapReady 函数以显示来自 json 的坐标。

谢谢

【问题讨论】:

    标签: android json google-maps


    【解决方案1】:

    这是工作代码:

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    
        // Fetch data
        fetchDataFromJSON();
    }
    
    private void fetchDataFromJSON()
    {
        // JSON response
        String strResponse = "{\"info\":[{\"nama\":\"Masjid Agung\",\"0\":\"Masjid Agung\",\"deskripsi\":\"......";
    
        try
        {
            JSONObject response = new JSONObject(strResponse);
            JSONArray jsonArray = response.getJSONArray("info");
    
            // Clear old markers
            mMap.clear();
    
            // Looping through all info and show on map
            for (int i = 0; i < jsonArray.length(); i++) {
    
                JSONObject jsonObject = jsonArray.getJSONObject(i);
    
    
                String name = jsonObject.getString("nama");
                String description = jsonObject.getString("deskripsi");
                String latitude = jsonObject.getString("lat");
                String longitude = jsonObject.getString("lng");
    
                // Add marker
                addMarkerToMap(latitude, longitude, name, description);
            }
    
        } catch (JSONException e) {
            e.printStackTrace();
            Toast.makeText(mContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    
    }
    
    public void addMarkerToMap(String latitude, String longitude, String title, String description)
    {
        double lat = Double.parseDouble(latitude);
        double lng = Double.parseDouble(longitude);
    
        // create marker
        MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lng))
                                                  .title(title)
                                                  .snippet(description);
    
        // Marker icon
        marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
    
        // Add marker to map
        mMap.addMarker(marker);
    }
    

    希望对你有帮助~

    【讨论】:

    • 谢谢老兄,它工作正常,我只是从 url 获取 json,我必须使用 AsyncTask .. thnks
    • @MuhFadlySangadji 如果我的回答有帮助并且看起来很有用,请将此标记为正确答案,我希望你也能投票给它。提前致谢
    【解决方案2】:

    你必须用你的 json 字符串创建一个 JsonObject ,遍历它并获取所需的字段。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 2015-10-12
      • 2017-03-25
      • 1970-01-01
      • 2018-11-01
      • 2020-09-06
      • 2010-10-22
      • 2015-02-21
      相关资源
      最近更新 更多