我嘗試爲我的地圖活動添加一種「預覽」。在這個活動中應該顯示名稱和後面的標記地址(在json中設置)。不幸的是,我沒有得到所選標記的正確內容。我只是得到其中一個項目的內容。這裏是我的代碼:嘗試從JSON獲取Linearlayout的正確內容,但每次都獲取相同的內容
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
contactList = new ArrayList<>();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map3);
mapFragment.getMapAsync(this);
ImageButton locations = (ImageButton) findViewById(R.id.btnloc);
locations.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MapsActivity.this, Locations.class);
startActivity(i);
}
});
}
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray contacts = jsonObj.getJSONArray("contacts");
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("id");
String name = c.getString("name");
String street = c.getString("street");
String postalcode = c.getString("postalcode");
String musicstyle = c.getString("musicstyle");
String musicsecond = c.getString("musicsecond");
String entry = c.getString("entry");
String opening = c.getString("opening");
String agegroup = c.getString("agegroup");
String imageurl = c.getString("imageurl");
String urlbtn = c.getString("urlbtn");
String Fsk = c.getString("Fsk");
String city = c.getString("city");
String lat = c.getString("lat");
String lng = c.getString("lng");
// tmp hash map for single contact
HashMap<String, String> contact = new HashMap<>();
// adding each child node to HashMap key => value
contact.put("id", id);
contact.put("name", name);
contact.put("street",street);
contact.put("postalcode",postalcode);
contact.put("musicstyle",musicstyle);
contact.put("musicsecond",musicsecond);
contact.put("entry",entry);
contact.put("opening",opening);
contact.put("agegroup",agegroup);
contact.put("imageurl",imageurl);
contact.put("urlbtn",urlbtn);
contact.put("Fsk",Fsk);
contact.put("city",city);
contact.put("lat", lat);
contact.put("lng", lng);
latitude = Double.parseDouble(lat); longitude = Double.parseDouble(lng);
contactList.add(contact);
namec = lat;
Imageurl = imageurl;
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
for (final HashMap<String, String> contact: contactList) {
LatLng P1 = new LatLng(
Double.parseDouble(contact.get("lat")),
Double.parseDouble(contact.get("lng")));
mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.VISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText(contact.get("name"));
Toast.makeText(getApplicationContext(),contact.get("name"),Toast.LENGTH_LONG).show();
return false;
}
});
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.INVISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText("Clubname");
}
});
}
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
new GetContacts().execute();
mMap.setMyLocationEnabled(true);
}
}
不工作,因爲在標記後面不僅僅是我需要解析到我的Linearlayout的名稱,所以這只是一個例子。我不得不解析這些東西。 –
如果我嘗試設置標籤,我怎樣才能從標籤中提取內容? –
我解決了它使用以下鏈接:http://stackoverflow.com/questions/15333971/get-other-values-from-marker –