Blackberry Лучший способ повторить попытку подключения в случае сбоя? - PullRequest
0 голосов
/ 04 мая 2011

У меня есть следующий код, я хочу иметь возможность перезапустить поток, если во время обработки запроса возникла исключительная ситуация.

Следующее в методе выполнения потока:

intstatus = httpConn.getResponseCode ();

                        if (status == HttpConnection.HTTP_OK) {
                            // Is this html?
                            String contentType = httpConn
                                    .getHeaderField(HEADER_CONTENTTYPE);
                            boolean htmlContent = (contentType != null && contentType
                                    .startsWith(CONTENTTYPE_TEXTHTML));

                            InputStream input = s.openInputStream();

                            byte[] data = new byte[1000];
                            int len = 0;
                            int size = 0;
                            StringBuffer raw = new StringBuffer();

                            while (-1 != (len = input.read(data))) {
                                // Exit condition for the thread. An
                                // IOException
                                // is
                                // thrown because of the call to
                                // httpConn.close(),
                                // causing the thread to terminate.
                                if (_stop) {
                                    httpConn.close();
                                    s.close();
                                    input.close();
                                }
                                raw.append(new String(data, 0, len));
                                size += len;
                            }

                            // raw.insert(0, "bytes received]\n");
                            // raw.insert(0, size);
                            // raw.insert(0, '[');
                            content = raw.toString();

                            if (htmlContent) {
                                content = prepareData(raw.toString());
                            }
                            input.close();
                        } else {
                             try{
                                httpConn.close();
                             }catch (Exception e) {
                                // TODO: handle exception
                            }
                             errorDialog(status+", status code");

                            retryFeed(getUrl(), "Network error. Retrying...");

                        }
                        s.close();
                    } else {



                        errorDialog("Sorry Insufficient Network Coverage.");
                        return;
                    }
                } catch (IOCancelledException e) {

                      errorDialog(e.getMessage());
                    retryFeed(getUrl(), "Network error. Retrying...");
                } catch (IOException e) {

                    errorDialog(e.getMessage());
                    retryFeed(getUrl(), "Network error. Retrying...");
                }

Какой самый безопасный способ повторить попытку подключения в случае сбоя?

Спасибо.

// Новый Это ошибканить.Это проверка на ошибки в соединении ... это поможет?и это самый эффективный метод?спасибо ..

/ Поток ошибок - поток для проверки ошибок / закрытый класс ErrorThread расширяет поток {частный статический final int TIMEOUT = 3000;// КАЖДЫЕ 3 секунды private boolean hasException = false;приватная строка _theUrl;

    /**
     * Stops this thread from listening for messages
     */
    private synchronized void stop()
    {
       hasException =false;
    }   

    /**
     * Listens for incoming messages until stop() is called
     * @see #stop()
     * @see java.lang.Runnable#run()
     */
    public void run()
    {
        try 
        {    

              while (true) {



                  if((hasException==true))
                  {
                      // Synchronize here so that we don't end up creating a connection that is never closed.
                    errorDialog("Will Fetch new");
                      synchronized(this)  
                      {
                          hasException=false;
                            if (!_connectionThread.isStarted()) {


                            fetchPage(_theUrl);
                        } else {

                            createNewFetch(_theUrl);

                        }

                      }

                }
                    try {

                        //errorDialog("No exception.");

                        sleep(TIMEOUT);

                    } catch (InterruptedException e) 
                    {

                        errorDialog("Exceptions"+e.toString()+e.getMessage());
                        System.exit(1);
                        //System.exit(0);/*Kill System*/
                    }


              }




        } 
        catch (Exception except)
        {                             

        }
    }

    public void setActive(boolean exception,String url)
    {
        this.hasException=exception;
        this._theUrl=url;

    }

}

1 Ответ

0 голосов
/ 04 мая 2011

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

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