【发布时间】:2015-11-11 03:31:46
【问题描述】:
我正在制作谷歌地图应用程序。由于 Geocoder 类返回空(在 [0] 处超出范围),我目前正在尝试 HTTPS Google 地图反向地理编码。 这是我的 onClick 调用:
public JSONArray getAddress(LatLng latLng) throws IOException {
URL url = new URL("https://maps.googleapis.com/maps/api/geocode/json?latlng="+latLng.latitude+","+latLng.longitude+"&key=AIza***********************");
Async async =new Async();
async.execute(url);
JSONArray response = async.jsonArray;
return response;
}
这是 Async 子类:
public class Async extends AsyncTask<URL, Void, JSONArray> {
public JSONArray jsonArray;
@Override
protected JSONArray doInBackground(URL... params) {
BufferedReader reader;
InputStream is;
try {
StringBuilder responseBuilder = new StringBuilder();
HttpURLConnection conn = (HttpURLConnection) params[0].openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is));
for (String line; (line = reader.readLine()) != null; ) {
responseBuilder.append(line).append("\n");
}
jsonArray = new JSONArray(responseBuilder.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return jsonArray;
}
和 manifest.xml:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
点击方法:
@Override
public void onMapClick(LatLng latLng) {
JSONArray js=null;
try {
js = getAddress(latLng);
mMap.addMarker(new MarkerOptions().position(latLng).title(js.getString(0)).draggable(true));//NullPointer
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException p) {
//todo
}
4 天以来,我试图获得与 NullPointerException 不同的东西。知道我在做什么错吗?在以调试模式连接的平板电脑上进行了测试。 任何帮助都会很有用。我很绝望。
【问题讨论】:
-
您需要等到 AsyncTask 完成后才能使用 JSONArray。 AsyncTask 是您的 Activity 的子类吗?另外,你在哪里使用
js? -
是的。如何等待?标记标题中的 js。我知道这不是解析的方式,但我会在获得 [0] 中的值后修复它
-
使用 onPostExecute 方法。显示您当前在哪里使用
js。 -
mMap.addMarker(new MarkerOptions().position(latLng).title(js.getString(0)).draggable(true));
-
复制代码到 PostExecute?
标签: android google-maps https google-maps-android-api-2