0

Postexecute yöntemimde haritada birden çok işaretçiyi güncelleştiremiyorum çünkü json'dan Lat-Lon'a ihtiyacım var, Bu durumda benim uygulama 4-5 saniye asmak almak ve bazen mesajJSON'dan yanıt aldıktan sonra birden fazla işaretçi ekleniyor ancak uygulama ana iş parçacığı üzerinde çok fazla iş yapıyor olabilir

yanıt vermiyor

uygulamasını gösterir, burada benim Kodunuzu olduğu

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(); 
    } 

cevap

0

orada 2 ana I geliştirilebilir görmek:

1) markerOptions.icon (BitmapDescriptorFactory.fromResource (R.drawable.marker_XXX);

bu bir çok zaman alır ve

Çözüm u örneğin aktiviteyi başlatmak zaman belirteçleri için tüm Bitmap yaratmaktır birçok kez yapmak. Onlar çok yol varsa ve hepsini kullanacağınızı bilmiyorsanız, en azından onları önbelleğe alabilirsiniz. Bu,

nolu aleti hızlandıracaktır. 2), bir ayarı bir cihaza bir yerden diğerine hareket ettiren birçok şey almanız gerçeği. isteğinizin parseNetworkResponse yönteminde daha önce bunu yapabilirsiniz. Buradaki işaretleyiciyi etkileyebilir ve bunları bir diziye ekleyebilir ve ardından ana iş parçacığı üzerinde onları haritaya eklemek için tekrarlayabilirsiniz. Birçok belirteçleri ile haritanızı güncellemek zaman kaynağı here

Son olarak bile bu 2 şey den

@Override 
protected Response<T> parseNetworkResponse(
     NetworkResponse response) { 
    try { 
     String json = new String(response.data, 
     HttpHeaderParser.parseCharset(response.headers)); 
    return Response.success(gson.fromJson(json, clazz), 
    HttpHeaderParser.parseCacheHeaders(response)); 
    } 
    // handle errors 
... 
} 

fazla bilgi hala bazı sorunları olabilir. Bu çözümün çözümü, eğer zaten var ise, yeni işaretleyiciler eklememektir, böylece işaretleyicileri tutmanız ve sonra yanıtın ne olduğuna bağlı olarak sadece gizleyip göstermeniz gerekir. Pek çok gizli işaretleyiciyi bırakmanın haritayı da yavaşlatacağını, böylece bir noktada onları temizlemeniz gerektiğini unutmayın.

+0

Değerli yorumunuz için teşekkür ederim, her iki çözüm yerine uygulamayı bir noktada asılırken denedim, ekranın önündeki bir tür ilerleme çubuğu göstererek işaretleyicilerimi güncelleyebilir miyim. – Decveen

+0

Tabii ki yapabilirsiniz ve yapmalısınız. Binlerce çözüm ve farklı tarzdaki ilerleme çubukları/göstergeleri vardır, bu yüzden birini seçmelisiniz. temel olarak, size düzeni eklemeniz gerekir, sonra bir istekte bulunduğunuzda ve işaretçiler oluşturulduğunda ve hazır olduğunuzda onResponse bunu durdurursunuz :) – djodjo

İlgili konular