JSONレスポンスでWeb APIから受け取った緯度と経度に応じてマーカーをプロットします。MarkerカスタムInfoWindowのタイトルとスニペット以上
問題は、各マーカーにID、コード、電話番号、および名前などの独自のデータセットがあることです。このデータがカスタムInfoWindowAdapterを使用して各マーカーのInfoWindowに表示されたいのですが、JSONで受け取った関連データを表示できません。
これまで私がこれまでに試したことは次のとおりです。このコードでは、すべてのマーカースニペットは、同じデータが含まれている、と私は各マーカーについてこのスニペットに異なるデータを追加したい:
private class GetFixture extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg) {
ServiceHandler serviceClient = new ServiceHandler();
Log.d("url: ", "> " + URL_ITEMS);
String json = serviceClient.makeServiceCall(URL_ITEMS, ServiceHandler.GET);
// print the json response in the log
Log.d("Get match fixture resps", "> " + json);
if (json != null) {
try {
Log.d("try", "in the try");
JSONArray jsonArray = new JSONArray(json);
Log.d("jsonObject", "new json Object");
// Getting JSON Array node
for (int i = 0; i <= jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
Double matchId = Double.parseDouble(c.getString(TAG_MATCHID));
Log.d("matchId", String.valueOf(matchId));
Double teamA = Double.valueOf(c.getString(TAG_TEAMA));
Log.d("teamA", String.valueOf(teamA));
teamB = c.getString(TAG_TEAMB);
Log.d("teamB", teamB);
// hashmap for single match
HashMap<String, String> matchFixture = new HashMap<String, String>();
HashMap<String, String> cc = new HashMap<String, String>();
// adding each child node to HashMap key => value
matchFixture.put(TAG_MATCHID, String.valueOf(matchId));
matchFixture.put(TAG_TEAMA, String.valueOf(teamA));
areahash.put(TAG_TEAMB, teamB);
matchFixtureList.add(new LatLng(matchId, teamA));
cc.put(TAG_TEAMB,teamB);
area.add(teamB);
}
} catch (JSONException e) {
Log.d("catch", "in the catch");
e.printStackTrace();
}
} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
int x;
//for (LatLng point : matchFixtureList) {
//for (String a:area)
for (i = 0; i < matchFixtureList.size(); i++) {
mMap.addMarker(new MarkerOptions().position(matchFixtureList.get(i)).title(area.get(i)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(matchFixtureList.get(i), 15));
mMap.animateCamera(CameraUpdateFactory.zoomIn());
// Zoom out to zoom level 10, animating with a duration of 2 seconds.
mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
if (mMap != null) {
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
View v = getLayoutInflater().inflate(R.layout.check, null);
TextView ashid = (TextView) v.findViewById(R.id.ash_id);
TextView ashcode = (TextView) v.findViewById(R.id.ash_code);
TextView Cellno = (TextView) v.findViewById(R.id.cell_id);
TextView Ashname = (TextView) v.findViewById(R.id.ash_name);
TextView NIC = (TextView) v.findViewById(R.id.nic_id);
TextView tvlat = (TextView) v.findViewById(R.id.lat_id);
TextView tvLng = (TextView) v.findViewById(R.id.lonti_id);
TextView Zmid = (TextView) v.findViewById(R.id.ZM_id);
LatLng ll = marker.getPosition();
ashid.setText(marker.getTitle());
tvlat.setText(""+ll.latitude);
tvLng.setText("" + ll.longitude);
Zmid.setText("" + ll.longitude);
NIC.setText(""+ll.latitude);
Ashname.setText("" + ll.longitude);
Cellno.setText(""+ll.latitude);
ashid.setText("" + ll.longitude);
ashcode.setText(teamB);
ashcode.setText(marker.getSnippet());
return v;
}
});
}
// mMap.addMarker(new MarkerOptions().position(pakistan).title("Marker in pakistn"));
//mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
// mMap.animateCamera(CameraUpdateFactory.zoomIn());
// Zoom out to zoom level 10, animating with a duration of 2 seconds.
// mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
//mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(matchFixtureList(i)));
//mMap.animateCamera(CameraUpdateFactory.zoomTo(5));
}
}
:
その後、
InfoWindowAdapter
で、HashMap
から入手したMarkerHolder
から取得した情報を使用しますこれは私がこれらのことをするのを助けます。私の割り当てを教えてください。今日は最後の日付です –@naveedabbas私はこの例をあなたのコードに非常に近づけましたが、私はまた、この回答を可能な限り一般的なものにしておき、他の人も助けていきたいと思います。問題を解決するのに十分な情報がありますが、この例を拡張してJSONのすべてのデータを表示するだけです。 –
@naveedabbasまた、もう1つ。ループ内で 'mMap.setInfoWindowAdapter()'を呼び出さないでください。一度呼び出されるだけです。 –