【问题标题】:How to get JSON data from a url in a map activity for android如何从 Android 地图活动中的 url 获取 JSON 数据
【发布时间】:2016-03-22 22:15:27
【问题描述】:

您好,我想知道如何从 URL 获取 JSON 数据并将其放入 android studio 中的地图活动中,这将替换默认位置,即 syndey?我无法弄清楚如何做到这一点,因为大多数在线教程都没有意义。

这是我想通过 URL 检索的数据

{"Users":[{"name":"Diaz","lon":"51.1251635","lat":"51.296910"},{"name":"Chris","lon":"51.139409","lat":"51.295825"}}

这是地图活动生成的默认代码

import android.os.Bundle;
import android.renderscript.ScriptGroup;
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;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private GoogleMap nMap;



    @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);

    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney, Australia, and move the camera.
        LatLng sydney = new LatLng(512.33,11.2333);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydeny));
        mMap.getMaxZoomLevel();
    }


}

【问题讨论】:

  • 您能向我们展示您的 JSON 数据代码吗?
  • 请查看更新后的代码@ChristianAbella

标签: java android json geojson


【解决方案1】:

首先,在地图上显示您当前的位置。您需要做的就是使用谷歌地图获取您首选位置的坐标。您现在可以使用该值创建一个 LatLng 对象。 您的应用当前显示 sidney,因为那是 Map 相机所在的位置。您在同一个 LatLng 处也有一个标记。

您可以简单地获取您想要显示的任何位置的坐标并将其传递给 Map 对象。

回到从 URL 获取 JSON 数据的主要问题;我可以说这很容易实现,并且根据您所询问的上下文,我可以推断您可能正在尝试查询 google map api。

Retrofit(http://square.github.io/retrofit/) 之类的库可以帮助您轻松完成这项工作。 只是不要忘记从后台线程执行操作。

使用基本的 HttpURLConnection

public JSONObject queryGoogleDistanceApi(String origin, String destination, String API_KEY_PLACES) throws Exception{
    String Url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + origin + "&destinations=" + destination + "&mode=driving&language=en&key=" + API_KEY_PLACES;

    HttpURLConnection conn = null;
    StringBuilder jsonResults = new StringBuilder();
    URL url = new URL(Url);
    Log.d(TAG, Url);
    conn = (HttpURLConnection) url.openConnection();
    InputStreamReader in = new InputStreamReader(conn.getInputStream());
    // Load the results into a StringBuilder
    int read;
    char[] buff = new char[1024];
    while ((read = in.read(buff)) != -1) {
        jsonResults.append(buff, 0, read);
    }
    if (conn != null) {
        conn.disconnect();
    }

    JSONObject object = new JSONObject(jsonResults.toString());
    return object;
}

【讨论】:

  • 你能举个例子吗?
  • for Log.d(Tag, Url) 我收到一条错误消息,提示“标签”具有私有访问权限,我该如何解决?
  • 您可以直接传入字符串文字,例如Log.d("GoogleRequest", ... 不过没那么重要。
  • 非常感谢,我对 android 很陌生,所以真的很挣扎。
  • 嗨,我遇到了类似的问题,并且将我在距离矩阵中的数据放在标记内。 @Ribads 你能看看我的问题吗? stackoverflow.com/questions/37553554/…
【解决方案2】:

您必须在 onMapReady 方法中调用您的 api。然后解析它并从您的数据中设置标记。如下代码:

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

    //call your api. get son data
    //{"Users":[{"name":"Diaz","lon":"51.1251635","lat":"51.296910"},{"name":"Chris","lon":"51.139409","lat":"51.295825"}}

    // Add a marker from JSON data, and move the camera.
    LatLng diaz = new LatLng(51.296910,51.1251635);
    mMap.addMarker(new MarkerOptions().position(diaz).title("Diaz"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(diaz));
    mMap.getMaxZoomLevel();
}

我认为你可以解析 Json 数据。如果您在解析 Json 数据时遇到问题,我可以再次为您提供帮助。

【讨论】:

  • 你将如何解析来自网站链接的 json 数据?
  • 嗨,我遇到了类似的问题,并且将我在距离矩阵中的数据放在标记内。 @Haniyeh 你能看看我的问题吗? stackoverflow.com/questions/37553554/…
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 2023-04-04
  • 2014-03-13
  • 1970-01-01
  • 2022-12-22
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多