开发者

Blackberry Best way to retry connection if failed?

开发者 https://www.devze.com 2023-03-02 23:56 出处:网络
I have the following code, i want to be able to restart the thread if an exception occurred while processing a request.

I have the following code, i want to be able to restart the thread if an exception occurred while processing a request.

The following in the run method of a thread:

int status = 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...");
                }

What is the safest way to retry the connection if failed?

Thanks.

//New This is the Error thread. That check for errors in the connection... will this help? and is it the most efficient method? thanks..

/Error Thread - Thread to check errors/ private class ErrorThread extends Thread { private static final int TIMEOUT = 3000; // EVERY 3 Seconds private boolean hasException = false; private String _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) 
                    {
开发者_JS百科
                        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;

    }

}


If the connecrtion fails, typically, you want to close it, pause a small time, and retry. The purpose of the pause is to prevent your device from devoting excessive resources to trying to connect to a server that's having issues.

0

精彩评论

暂无评论...
验证码 换一张
取 消