这是我的任务。给定一对纬度和经度,我想从Google Places API获取一个JSON。下面的函数reverseGeoCoding返回字符串JSON。
public String reverseGeoCoding(String lat, String lng) {
latitude = lat;
longitude = lng;
String json = new String();
String url = new String();
URL googleAPI;
try {
url = URL + "location=" + latitude + "," + longitude + "&" + "radius=" + radius + "&" + "language=" + language + "&" + "sensor=false" + "&" + "key=" + APIKey;
googleAPI = new URL(url);
Log.d("TEST", googleAPI.toString());
URLConnection gc = (URLConnection) googleAPI.openConnection();
Log.d("TEST", gc.toString());
InputStream is = gc.getInputStream();
Log.d("TEST", "InputStream created");
BufferedReader in = new BufferedReader(new InputStreamReader(is));
Log.d("TEST", "reader created");
String inputLine;
while ((inputLine = in.readLine()) != null) {
json = json + inputLine + "\n";
Log.d("TEST", inputLine);
}
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
然而,getInputStream() 方法无法正常工作。我已经在 Web 浏览器上检查了 URL 请求,并且它可以正常工作(返回 JSON 文档)。
以下是错误信息。(为什么第 17 和 18 行会产生错误)
1. 12-11 00:46:02.862: W/System.err(12953): android.os.NetworkOnMainThreadException
2. 12-11 00:46:02.872: W/System.err(12953): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
3. 12-11 00:46:02.872: W/System.err(12953): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
4. 12-11 00:46:02.872: W/System.err(12953): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
5. 12-11 00:46:02.872: W/System.err(12953): at java.net.InetAddress.getAllByName(InetAddress.java:220)
6. 12-11 00:46:02.872: W/System.err(12953): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
7. 12-11 00:46:02.872: W/System.err(12953): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
8. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
9. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
10. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
12. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
13. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
14. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
15. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
16. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
17. 12-11 00:46:02.882: W/System.err(12953): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
18. 12-11 00:46:02.894: W/System.err(12953): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:270)
19. 12-11 00:46:02.894: W/System.err(12953): at locationpredict.POIList.reverseGeoCoding(POIList.java:55)
20. 12-11 00:46:02.894: W/System.err(12953): at locationpredict.TestMain$1.onClick(TestMain.java:62)