2012-02-29 3 views
2

Я новичок в Android, но я знаю несколько в Java и Java EE При общении с сервером (webservice) он отлично работает с ответом, который я получаю от него. Но если есть временная задержка более 5 секунд, она будет ANR. Теперь мой вопрос заключается в том, как проверить с помощью моей java-функции, узнать, отвечает ли сервер или не отвечает. Любые идеи в этом?Как избежать ответа ANR в Android, если в сервере есть временная задержка?

Даже некоторые похожие примеры помогут мне.

Код сниппета

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
      // Problem is if Server is not Working , it delays and the UI wents to ANR 
       if( sendToWebservice(String_to_send)=="fromWebservice") { 
       Toast.makeText(context, "Connected", 500).show(); 

       } 
      else { 
       Toast.makeText(context, "Not Connected,Try again ", 500).show(); 
       finish(); 
      } 
    } 
    }, 5000); 

Дополнительная информация: Я использую jax.ws создать webservice & ksoap api в Android. Спасибо заранее.

Редактировать

if( sendToWebservice(String_to_send).equalIgnorecase("fromWebservice") instead of == 

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

+2

Не делайте этого в потоке пользовательского интерфейса ... И нет, Handler не новый Thread ... – Selvin

+0

@Selvin: ok !! я получил ур точку .. ll обратитесь к документации слишком – Pradeepraj

+1

вместо этого использовать AsyncTask. – bhups

ответ

2

Прежде всего, Это условие должно быть,

if(sendToWebservice(String_to_send).equals("fromWebservice")) 

Теперь ANR,

Вы можете поставить таймаут ответ в запросе HTTP так, если есть задержка по времени, то вы получаете ответ от тайм-аута с сервера. Также, если возможно, отобразите какой-нибудь диалог прогресса, когда какой-либо вызов webservice сделал в потоке пользовательского интерфейса и ваш вызов веб-службы в другой рабочей ветке.