1

JacksonJson ライブラリの感触をつかもうとしていたところです。そのために、JSON データを Places API から文字列に取得しようとしていました。

キーは有効ですが (ブラウザーと別のアプリでテストしました)、エラーが発生します。コードは次のとおりです。

protected Void doInBackground(Void... params)
    {
        try
        {
            URL googlePlaces = new URL(
                    "https://maps.googleapis.com/maps/api/place/textsearch/json?query=Cloud&types=food&language=en&sensor=true&location=33.721314,73.053498&radius=10000&key=<Key>");
            URLConnection tc = googlePlaces.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    tc.getInputStream()));

            StringBuffer sb = new StringBuffer();

            while ((line = in.readLine()) != null)
            {
                sb.append(line);
            }

            Log.d("The Line: ", "" + line);
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
}

これは logcat からの出力です。

02-14 12:29:07.407: D/libc-netbsd(16792): getaddrinfo: maps.googleapis.com  return error = 0x8 >>
02-14 12:29:07.813: D/libc-netbsd(16792): getaddrinfo: maps.googleapis.com get result from proxy >>
02-14 12:29:08.706: D/libc-netbsd(16792): getaddrinfo: maps.googleapis.com  return error = 0x8 >>

マニフェストにインターネット許可があります。これが機能しない理由や、これらのエラーが何であるかはわかりません。

4

1 に答える 1

4

これは、URL にアクセスする正しい方法ではありません。出力ストリームにバイトを書き込み、URL を要求するためだけに、そのパラメーターを URL に渡しています。

   URL googlePlaces = new URL("https://maps.googleapis.com/maps/api/place/textsearch/json?query=Cloud&types=food&language=en&sensor=true&location=33.721314,73.053498&radius=10000&key=<Key>");

これが URL にアクセスする正しい方法です。

  url=new URL("https://maps.googleapis.com/maps/api/place/textsearch/json");

次に、すべてのパラメーターを params マップに配置します。

        Map<String, String> params = new HashMap<String, String>();
            params.put("query","Cloud");
            params.put("types", "foods");....like this put all

そして、体を作ります..

    StringBuilder bodyBuilder = new StringBuilder();
            Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
            // constructs the POST body using the parameters
            while (iterator.hasNext()) {
                Entry<String, String> param = iterator.next();
                bodyBuilder.append(param.getKey()).append('=')
                        .append(param.getValue());
                if (iterator.hasNext()) {
                    bodyBuilder.append('&');
                }
            }
            String body = bodyBuilder.toString();

ここで Body には、URL で直接要求できないすべてのパラメーターが含まれていますが、それを OutputStream に書き込んでから、要求を作成してバイトを書き込みます。

               byte[] bytes = body.getBytes();
               OutputStream out = conn.getOutputStream();
               out.write(bytes);
               out.close();
于 2013-02-14T09:43:10.157 に答える