при вызове конструктора геокодера в потоке соединение разрывается - PullRequest
1 голос
/ 29 мая 2011

Я с трудом пытаюсь реализовать геокодер в Android в классе Runnable: я так и сделал:

Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);


                List<Address> list = geocoder.getFromLocation(
                        (int)(coord.getLat()), (int)(coord.getLon()), 1);

                if (list != null && list.size()>0 ){

                    Address address=list.get(0);
                     String result = address.getAddressLine(0) + ", " + address.getLocality();

                }

Мой класс, Runnable, на самом деле является потоком, который подключается к удаленному серверу.и получает оттуда данные с помощью буфера.

И вот моя проблема:

Соединение с сервером является или было достаточно хорошим, пока я не поместил строку с геокодером внутри своего кода.

Теперь, когда я добавил строки геокодера, эта сторона моего соединения с сервером разрывается !!!

Теперь я точно знаю, что это из-за геокодера, потому что только сегодня я добавилэто к моему приложению, и до сих пор мое приложение работало очень хорошо, и связь была сильной ....

Вот весь мой код, и если кто-то может сказать, как я могу реализовать Geocoder лучше, пожалуйста, сделайте:

public class ClientThread_special implements Runnable {

    int serverPort = 6500;
    private String serverIpAddress = "10.0.2.2";
    Coordinate coord;
    ObjectInputStream is;
    boolean stop = false;
    DBAdapter db;
    boolean t = false;
    int id;
    Context context;
    PrintStream strReturnedAddress;

    public ClientThread_special(DBAdapter db, Context context) {
        this.db = db;
        this.context = context;

    }

    public void run() {

        Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);


        try {
            InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
            Socket socket = new Socket(serverIpAddress, serverPort);

            is = new ObjectInputStream(socket.getInputStream());

            try {
                while (!stop) {
                    coord = (Coordinate) is.readObject();
                    System.out.println("Date de la clientul de monitorizare:"
                            + coord.getLat());

                    List<Address> list = geocoder.getFromLocation(
                            (int)(coord.getLat()), (int)(coord.getLon()), 1);

                    if (list != null && list.size()>0 ){

                        Address address=list.get(0);
                         String result = address.getAddressLine(0) + ", " + address.getLocality();

                    }
                    System.out.println("adresa returnata folosind geocoder:"
                            + strReturnedAddress);

....................................................

                }

            } catch (Exception e) {

                e.printStackTrace();

            }


            is.close();

        } catch (UnknownHostException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();
        }

    }

public void stop() {

        this.stop = true;

    }

}

С сервера я читаю какой-то объект .... Если это необходимо, другие подробности я здесь

1 Ответ

0 голосов
/ 19 апреля 2013

Попытайтесь поместить Log.v("EXCEPTION","message",e); внутри блока IO try / catch, так как в основном при сбое geocoder выдается IOException. и это может помочь вам, так как вы будете знать, что именно идет не так. Что я чувствую, так это то, что геокодер иногда не может вернуть адрес, который соответствует lat / long, поэтому проверьте ваш lat / long и проверьте, чтобы список не равнялся NULL, а затем продолжайте, чтобы предотвратить сбой. Вот так .... if (list.size()>0) address=address_found ; else address="unknow address" ; and proceed like this,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...