Geocoder Android - jak przyspieszyć?

0

W aplikacji android pobieram adres na podstawie współrzędnych geograficznych za pomocą Geocoder. Mam 9 adresów do pobrania i wyświetlenia w jednym layoucie. Problem w tym, że zanim wyświetlą się pobrane adresy, minie czasem 15 sekund. Jak to przyspieszyć? Moja metoda do pobrania jednego adresu wygląda tak:

 public void aktualizujRynek() {

Thread thread1 =new Thread(new Runnable() {
            public void run() {
                HttpURLConnection connection = null;
                try {
                    URL myUrl = new URL("http://......zapytanie http....................");
                    connection = (HttpURLConnection) myUrl.openConnection();
                    InputStream iStream = connection.getInputStream();
                    final String fResponse = IOUtils.toString(iStream);
                    final TextView fView = (TextView) findViewById(R.id.button8);
                    fView.post(new Runnable() {
                        @Override
                        public void run() {
                            // fView.setText("RESPONSE" + fResponse);
                        }
                    });
                    final boolean post = fView.post(new Runnable() {

                        @Override
                        public void run() {

                            //parse
                            JSONObject root = null;
                            try {
                                root = new JSONObject(fResponse);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            try {
                                //współrzędne geograficzne
                                String Lat = root.getString("Lat");
                                double Lat_double =  Double.parseDouble(Lat);
                                String Lon = root.getString("Lon");
                                double Lon_double = Double.parseDouble(Lon);

                                //nieaktualny odczyt
                                String epoch_czujnik = root.getString("Epoch");
                                long epoch_czujnik_long = Long.parseLong(epoch_czujnik); //czas ostatniego odczytu
                                long epoch = System.currentTimeMillis() / 1000; //aktualny czas
                                long roznica1 = epoch - epoch_czujnik_long;

                                //lokalizacja ze współrzędnych
                                Geocoder geocoder;
                                List<Address> addresses;
                                geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
                                addresses = geocoder.getFromLocation(Lat_double, Lon_double , 1); 
                                String address = addresses.get(0).getAddressLine(0); 
                                String firstWords = address.substring(0, address.lastIndexOf(" "));
                                String city = addresses.get(0).getLocality();

                                //lokalizacja

                                if (roznica1 > 7200) {
                                    String komunikat = "(czujnik nie działa)";
                                    if (city.equals(firstWords)) {
                                        final TextView fView102 = (TextView) findViewById(R.id.button8);
                                        fView102.setText(city+ System.getProperty("line.separator")+komunikat);
                                    }
                                    else{
                                        final TextView fView102 = (TextView) findViewById(R.id.button8);
                                        fView102.setText(city+ System.getProperty("line.separator")+firstWords + System.getProperty("line.separator")+komunikat);
                                    }

                                }
                                else {
                                    if (city.equals(firstWords)) {
                                        final TextView fView102 = (TextView) findViewById(R.id.button8);
                                        fView102.setText(city);
                                    }
                                    else{
                                        final TextView fView102 = (TextView) findViewById(R.id.button8);
                                        fView102.setText(city + System.getProperty("line.separator") + firstWords);

                                    }

                                }

                                //kolor 
                                String kolor = root.getString("Color");
                                TextView test = (TextView) findViewById(R.id.button8);
                                if (roznica1 > 7200) {//różnica w czasie większa od 7200ms czyli 2 godz
                                    test.setBackgroundColor(Color.parseColor("#b3b3b3"));
                                } else {
                                    test.setBackgroundColor(Color.parseColor(kolor));

                                }

                                //IJP
                                String ijp1 = root.getString("IJP");

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                            catch (IOException e) {
                                e.printStackTrace();
                            }
                            //end parse
                        }

                    });

                } catch (MalformedURLException ex) {
                    Log.e(TAG, "Invalid URL", ex);
                } catch (IOException ex) {
                    Log.e(TAG, "IO / Connection Error", ex);

                } finally {
                    if (connection != null)
                        connection.disconnect();
                }
            }

        });
        thread1.start();

    }
0

Dodaj "println" w metodzie. Zobacz gdzie program czeka i na jak długo. Zobacz też, czy połączenia wykonują się faktycznie równolegle i daj znać co wyszło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0