从地理位置api

时间:2018-02-06 11:21:26

标签: java android http-status-code-400 google-geolocation

我正在尝试使用地理位置api来获取该位置的纬度和经度。因此,我在开发人员控制台上创建了一个项目并创建了一个api密钥。我在api https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

中使用了这个api密钥

所以当我在邮差中执行请求时,它运行良好。 但是,当我尝试在应用程序中执行相同的请求时,它会将响应作为响应代码400.

根据开发人员指南的响应代码400

https://developers.google.com/maps/documentation/geolocation/intro#errors

显示api键错误时出现。但是密钥如何在邮递员中而不是在应用程序中工作?

以下是服务器请求的代码:

    public JSONObject sendPostRequest1(String data) {

    try {

        URL url = new URL(api);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");
      //  con.setRequestProperty("content-type", "application/x-www-form-urlencoded");
        con.setDoOutput(true);
        con.setDoInput(true);
        OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());

        try {
            writer.write(data);
        } catch (Exception e) {
            Log.e("Exception111", e.toString());
        }

        writer.close();

        int responseCode = con.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_CREATED) {
            StringBuilder sb = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line = "";
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            reader.close();
            Log.d("ServerResponse", new String(sb));
            String output = new String(sb);
            return new JSONObject(output);
        } else {
            Log.e("Exception", "" + responseCode);
        }
    }
    catch (JSONException je)
    {
        je.printStackTrace();
        return Excpetion2JSON.getJSON(je);
    }
    catch(IOException e)
    {

    }
    return null;
}

异步任务:

public class GetLocationAsyncTask extends AsyncTask<String, Void, JSONObject> {

    String api;
    JSONObject jsonParams;
    Context mContext;
    private ProgressDialog loadingDialog;
    private String number,code;
    public GetLocationsCallBack getLocationsCallBack;

    public GetLocationAsyncTask(Context context,GetLocationsCallBack getLocationsCallBack) {

        this.mContext = context;
        this.getLocationsCallBack = getLocationsCallBack;

    }

    public interface GetLocationsCallBack {
        void doPostExecute(ArrayList<Location> list);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected JSONObject doInBackground(String... params) {
        try {

            api = "https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyCArRAX4oHdfFWrTWhXrOVBQtbs";

            jsonParams = new JSONObject();
            jsonParams.put("cellId", params[0]);
            jsonParams.put("locationAreaCode",params[1]);

            ServerRequest request = new ServerRequest(api, jsonParams);
            return request.sendPostRequest1(jsonParams.toString());

        } catch (Exception ue) {
            return Excpetion2JSON.getJSON(ue);
        }
    }  //end of doInBackground

    @Override
    protected void onPostExecute(JSONObject response) {
        super.onPostExecute(response);


            if(response.has("location"))
            {

                try {

                    Location location = new Location();

                    location.setLattitude(response.getString("lat"));
                    location.setLongitude(response.getString("lng"));

                    ArrayList<Location> locations = location.getLocationArrayList();

                    locations.add(location);
                }
                catch (JSONException je)
                {
                    Log.d("JsonException",je.toString());
                }

            }

        if (loadingDialog.isShowing())
            loadingDialog.dismiss();

    }
}

执行异步任务:

        TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();

        int cellid= cellLocation.getCid();
        int celllac = cellLocation.getLac();


        Log.d("CellLocation", cellLocation.toString());
        Log.d("GSM CELL ID",  String.valueOf(cellid));
        Log.d("GSM Location Code", String.valueOf(celllac));

        GetLocationAsyncTask getLocationAsyncTask = new GetLocationAsyncTask(MainActivity.this,MainActivity.this);
        getLocationAsyncTask.execute(String.valueOf(cellid),String.valueOf(celllac));

这有什么问题吗?请帮忙。谢谢..

1 个答案:

答案 0 :(得分:1)

你必须告诉接收方你发送的是json

con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");