Ich habe mehrere Markierungen auf Karte in meiner postexecute-Methode aktualisiert, weil ich Lat-Lon von Json brauche, In diesem Fall wird meine Anwendung erhalten hängen für 4-5 Sekunden und irgendwann zeigt NachrichtHinzufügen von mehreren Markern nach Erhalt der Antwort von JSON, aber Anwendung möglicherweise zu viel Arbeit auf seinem Hauptthread
Anwendung reagiert nicht
, hier ist mein Code-
try{
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject2=jsonArray.getJSONObject(i);
ViewAgency_Set_Get set_Get = new ViewAgency_Set_Get();
set_Get.setservices_type(jsonObject2.getString("fld_category_name"));
set_Get.setCity(jsonObject2.getString("fld_city_name"));
set_Get.setPincode(jsonObject2.getString("fld_pincode"));
set_Get.setSalary(jsonObject2.getString("fld_budget"));
set_Get.setFulltime_preference(jsonObject2.getString("fld_full_time_preference"));
set_Get.setParttimePreference(jsonObject2.getString("fld_part_time_preference"));
set_Get.setAvailabiliy(jsonObject2.getString("fld_availability"));
set_Get.setExperience(jsonObject2.getString("fld_exp_from")+"-"+jsonObject2.getString("fld_exp_to"));
set_Get.setDate(jsonObject2.getString("fld_posting_date"));
set_Get.setVendor_worker_id(jsonObject2.getString("fld_post_your_req_id"));
set_Get.setApply_job("Apply");
JSONArray jsonArray2 = jsonObject2.getJSONArray("getjobSpecItems");
for (int j = 0; j < jsonArray2.length(); j++) {
JSONObject jsonObject3 = jsonArray2.getJSONObject(j);
Grid_specs grid_specs = set_Get.new Grid_specs();
grid_specs.setSpeciality(jsonObject3.getString("fld_sub_category_name"));
set_Get.list_Specs.add(grid_specs);
}
arrayList_jobs.add(set_Get);
final Geocoder geocoder = new Geocoder(getActivity());
final String zip = jsonObject2.getString("fld_pincode");
List<Address> addresses = geocoder.getFromLocationName(zip, 1);
if (addresses != null && !addresses.isEmpty()) {
address = addresses.get(0);
String message = String.format("Latitude: %f, Longitude: %f",
address.getLatitude(), address.getLongitude());
markerOptions = new MarkerOptions().position(
new LatLng(address.getLatitude(), address.getLongitude()))
.title("Job Posted for:- "+jsonObject2.getString("fld_category_name"));
// changing marker color
if (arrayList_jobs.get(i).getservices_type().equals("Tutor")){
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_tutor));
}
if (arrayList_jobs.get(i).getservices_type().equals("Maid")){
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_maid));
}if (arrayList_jobs.get(i).getservices_type().equals("Driver")){
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_driver));
}if (arrayList_jobs.get(i).getservices_type().contains("Chef")){
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_chef));
}if (arrayList_jobs.get(i).getservices_type().equals("Helper")){
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_help));
}
marker =googleMap.addMarker(markerOptions);
}
}
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(13).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
SearchJobListAdapter adapter = new SearchJobListAdapter(getActivity(), arrayList_jobs,
"Show",manager);
search_listView.setAdapter(adapter);
}catch(Exception e){
e.printStackTrace();
}
danke für ihren wertvollen kommentar, ich habe ihre beiden lösungen ausprobiert anstatt die app an irgendeinem punkt aufgehängt zu bekommen, kann ich meine marker aktualisieren, indem ich eine art progress bar vor dem bildschirm zeige. – Decveen
natürlich können Sie und Sie sollten. Es gibt Tausende von Lösungen und verschiedene Arten von Fortschrittsbalken/Indikatoren, so dass Sie einen auswählen müssen. im Grunde müssen Sie es zu Ihrem Layout hinzufügen, dann, wenn Sie eine Anfrage machen, starten Sie es und onResponse, wenn die Marker erstellt werden und fertig Sie aufhören :) – djodjo