【发布时间】:2015-06-08 00:42:10
【问题描述】:
我正在尝试从服务器检索 JSON 响应,对其进行解析并向我的地图添加标记。我有一个工作地图,并添加了按钮,其中一个我想从服务器加载标记。 像这样调用一个动作:
public void onClick(View v) {
switch (v.getId()){
case R.id.btnLoc:
if(LocOn == 0){
googleMap.setMyLocationEnabled(true);
double lat= googleMap.getMyLocation().getLatitude();
double lng = googleMap.getMyLocation().getLongitude();
LatLng ll = new LatLng(lat, lng);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(ll, 18));
Loc.setBackgroundResource(R.drawable.loc);
LocOn = 1;
LoadMarkers.setText("Clear Markers");
GetMarkers markers = new GetMarkers();
markers.execute();
} else {
LocOn = 0;
Loc.setBackgroundResource(R.drawable.noloc);
LoadMarkers.setText("Load Markers");
googleMap.clear();
}
}
}
“GetMarkers”操作将调用这个:
class GetMarkers extends AsyncTask<User, Void, List<JMarker>>{
@Override
protected List<JMarker> doInBackground(User... params) {
try {
URL url = new URL("someurl.php");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
String param = "username="+user.username+"&pw="+user.password;
OutputStream out = conn.getOutputStream();
DataOutputStream dataOut = new DataOutputStream(out);
dataOut.writeBytes(param.trim());
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
StringBuilder builder = new StringBuilder();
while((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
String response = builder.toString();
System.out.println(response); //This works, I'm getting a JSON response. Just need to parse it and return it to onPostExecute for processing.
}
catch (IOException e) {
e.printStackTrace();
}
return null; //This will eventually return the JSON object
}
@Override
protected void onPostExecute(List<JMarker> jMarkers) {
for(JMarker marker: jMarkers) {
LatLng position = new LatLng(marker.LAT, marker.LNG);
googleMap.addMarker(new MarkerOptions().position(position));
}
}
}
onPostExecute,正在尝试将最终返回的标记添加到地图中。
我希望有人可以帮助我。先感谢您。
【问题讨论】:
-
您应该发布应用显示的错误消息
-
我正在使用适用于 Android 的 Google Maps API。
-
看起来你应该在调用execute()时发送一个用户参考,然后设置
user = params[0] -
是的,我注意到了这一点,但一旦我意识到它发送的是空值。然后我从本地数据库加载用户,然后从那里开始。我在下面附上了我的答案。谢谢。
标签: java android json google-maps