2012-10-15 40 views
-1

我想要处理HttpHostConnectException当用户尝试发送一些数据时没有互联网连接。我不喜欢这样,我RESTClient实现类,我连接到服务器:禁用强制关闭弹出android

catch (HttpHostConnectException e) { 

       client.getConnectionManager().shutdown(); 
       try { 
        throw new NoInternetException(); 
       } catch (NoInternetException e1) { 
        inetError = true; 
        e1.printStackTrace(); 
       } 

       e.printStackTrace(); 
      } 

,并在我的活动时,我捕捉到了异常:

catch(NoInternetException e) { 
      this.cancel(true); 
      editor.clear(); 
      editor.commit(); 
      finish(); 
      startActivity(getIntent()); 
      Toast.makeText(LoginActivity.this, "You've lost internet connection. You should try later.",Toast.LENGTH_LONG) 
       .show(); 
      e.printStackTrace(); 
      } 

我要处理这个异常,重新启动的电流活动这是用户最后一次使用并显示吐司,如“你没有任何连接”。但是我通过强制关闭按钮弹出异常。我不希望它显示,但要重新加载活动并显示Toast与我的消息。我怎样才能实现这个?

堆栈跟踪异常:

com.library.NoInternetException 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:447) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
org.apache.http.conn.HttpHostConnectException: Connection to https://192.168.0.250 refused 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:401) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.net.ConnectException: /192.168.0.250:443 - Network is unreachable 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 
    at java.net.Socket.connect(Socket.java:1002) 
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143) 
... 14 more 
Error converting result java.lang.NullPointerException 
End of input at character 0 of 
java.lang.InterruptedException 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1272) 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:220) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:83) 
    at android.os.AsyncTask$3.done(AsyncTask.java:196) 
    at java.util.concurrent.FutureTask$Sync.innerCancel(FutureTask.java:294) 
    at java.util.concurrent.FutureTask.cancel(FutureTask.java:76) 
    at android.os.AsyncTask.cancel(AsyncTask.java:325) 
    at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:422) 
    at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
cscCountry is not German : SEK 
dashboard 
    10-15 18:48:02.469: I/download page count dashboard(5061): 1 
    10-15 18:48:02.559: D/myLogs(5061): onCreate 
    10-15 18:48:02.559: D/myLogs(5061): onStartCommand 
    10-15 18:48:02.839: I/getOrders start(5061): 1 
    10-15 18:48:03.039: I/getOrders end(5061): 6 
    10-15 18:48:03.039: I/params(5061): page1 
    10-15 18:48:03.039: I/params(5061): perpage6 
    10-15 18:48:03.039: W/dalvikvm(5061): threadid=13: thread exiting with uncaught exception (group=0x40018578) 
    10-15 18:48:03.089: E/AndroidRuntime(5061): FATAL EXCEPTION: AsyncTask #4 
java.lang.RuntimeException: An error occured while executing doInBackground() 

    at android.os.AsyncTask$3.done(AsyncTask.java:200) 
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
    10-15 18:48:03.089: E/AndroidRuntime(5061):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.lang.NullPointerException 
    at com.library.ServiceMessages.md5(ServiceMessages.java:387) 
    at com.library.ServiceMessages$DklabExecute.doInBackground(ServiceMessages.java:114) 
    at com.library.ServiceMessages$DklabExecute.doInBackground(ServiceMessages.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    ... 4 more 
    10-15 18:48:03.169: I/database closing(5061): All DAO's might be destroyed 
destroy 
com.library.NoInternetException 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:447) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
org.apache.http.conn.HttpHostConnectException: Connection to https://192.168.0.250 refused 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:401) 
    at com.library.RestClient$AsyncExecute.doInBackground(RestClient.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.net.ConnectException: /192.168.0.250:443 - Network is unreachable 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 
    at java.net.Socket.connect(Socket.java:1002) 
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143) 
    ... 14 more 
Error converting result java.lang.NullPointerException 
Error parsing data org.json.JSONException: End of input at character 0 of 
java.lang.NullPointerException 
    at com.library.UserFunctions.getOrders(UserFunctions.java:71) 
    at com.assignmentexpert.DashboardActivityAlt.getOrderList(DashboardActivityAlt.java:318) 
    at com.assignmentexpert.DashboardActivityAlt.access$6(DashboardActivityAlt.java:309) 
    at com.assignmentexpert.DashboardActivityAlt$DownloadTask.doInBackground(DashboardActivityAlt.java:500) 
    at com.assignmentexpert.DashboardActivityAlt$DownloadTask.doInBackground(DashboardActivityAlt.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
     at java.lang.Thread.run(Thread.java:1019) 
+2

逼近是一种力量接近。您的应用程序基本上收到来自内核的SIGINT信号。你不应该拦截它,而是检查你的代码。 – shkschneider

+0

向我们展示强制关闭错误的Logcat。那么帮助你会更容易。 – YuviDroid

+1

你有很多例外...... NullPointerException,HttpHostConnectException,ConnectException。也许这是实际导致强制关闭的NullPointerException(com.library.UserFunctions.getOrders(UserFunctions.java:71))。 – YuviDroid

回答

0

你得到强制关闭,因为你可能在运行此HttpConnection的在你的UI线程。这是有问题的,因为它会导致UI挂起和结巴......因此,强制关闭。改为使用AsyncTask

+0

要验证这一点,请检查logcat中的NetworkActivityOnMainThread异常。 – shkschneider

+0

不,我使用AsyncTask作为连接,至于服务器响应解析... –

0

只有3个错误有重要线路:

Error parsing data org.json.JSONException: End of input at character 0 of 
10-15 18:48:03.759: W/System.err(5061): java.lang.NullPointerException 
10-15 18:48:03.759: W/System.err(5061):  at com.library.UserFunctions.getOrders(UserFunctions.java:71) 

你似乎得到一个空的响应,或者至少不能有螺纹JSON响应。检查UserFunctions第71行,并检查您的AsyncTask是否可以处理非JSON结果而不会崩溃。