2012-07-30 127 views
0

我有一個可正常工作的XML解析器,但是如果用戶連接到未瀏覽應用程序中斷的網絡。要設置一個功能來檢測用戶是否連接,但上面提到的問題,用戶將被連接,但沒有瀏覽。Android XML閱讀器出錯

我的代碼如下全:

public void chamaParser(){ 
    Boolean conected = Conectado(this); 
    if(conected == true){ 
     new DoInBackground().execute(); 
    } else { 
     mPullRefreshListViewRSS.onRefreshComplete(); 
     new AlertDialog.Builder(PullToRefreshListActivityRSS.this) 
       .setTitle("Alerta!") 
       .setMessage("Não foi possível estabelecer uma conexão com a Internet, verifique sua rede ou tente novamente mais tarde.") 
       .setNeutralButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) {} 
     }).show(); 
    } 
} 

public void do_update() { 
    RssParser.parse(); 
} 

public static boolean Conectado(Context context) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     String LogSync = null; 
     String LogToUserTitle = null; 
     if (cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) { 
      LogSync += "\nConectado a Internet 3G "; 
      LogToUserTitle += "Conectado a Internet 3G "; 
      return true; 
     } else if(cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { 
      LogSync += "\nConectado a Internet WIFI "; 
      LogToUserTitle += "Conectado a Internet WIFI "; 
      return true; 
     } else { 
      LogSync += "\nNão possui conexão com a internet "; 
      LogToUserTitle += "Não possui conexão com a internet "; 
      return false; 
     } 
    } catch (Exception e) { 
     return false; 
    } 
} 

private class DoInBackground extends AsyncTask<Void, Void, Void> implements DialogInterface.OnCancelListener { 
    private ProgressDialog dialog; 

    protected void onPreExecute() { 
     //dialog = ProgressDialog.show(PullToRefreshListActivityRSS.this, "", "Carregando...", true); 
     dialog = ProgressDialog.show(PullToRefreshListActivityRSS.this, "", "Carregando...", true, true, new DialogInterface.OnCancelListener(){ 
       @Override 
       public void onCancel(DialogInterface dialog) { 
        mPullRefreshListViewRSS.onRefreshComplete(); 
        DoInBackground.this.cancel(true); 
        // finish(); 
       } 
     }); 
    } 

    protected Void doInBackground(Void... unused) { 
     PodcastAdapterRSS.topBarRSS=true; 

     do_update(); 
     return null; 
    } 

XML解析器:

public class RssParser { 

    public static void parse() { 
     URL url; 
     try { 
      url = new URL("http://www.xxxx.com.br/feed/"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

      if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder db = dbf.newDocumentBuilder(); 
       Document doc; 
       doc = db.parse(url.openStream()); 
       doc.getDocumentElement().normalize(); 
       NodeList itemLst = doc.getElementsByTagName("item"); 
       arrays.Title = new String[itemLst.getLength()]; 
       arrays.Link = new String[itemLst.getLength()]; 
       arrays.Description = new String[itemLst.getLength()]; 
       // arrays.PodcastMedia = new String[itemLst.getLength()]; 

       for(int i=0; i < itemLst.getLength(); i++){ 

        Node item = itemLst.item(i); 
        if(item.getNodeType() == Node.ELEMENT_NODE){ 
         Element ielem = (Element)item; 
         NodeList title = ielem.getElementsByTagName("title"); 
         NodeList link = ielem.getElementsByTagName("link"); 
         //NodeList description = ielem.getElementsByTagName("description"); 
         NodeList content = ielem.getElementsByTagName("description"); 
         // NodeList media = ielem.getElementsByTagName("media:content"); 

         // String mediaurl = media.item(0).getAttributes().getNamedItem("url").getNodeValue(); 

          arrays.Title[i] = title.item(0).getChildNodes().item(0).getNodeValue(); 
          arrays.Link[i] = link.item(0).getChildNodes().item(0).getNodeValue(); 
          arrays.Description[i] = content.item(0).getChildNodes().item(0).getNodeValue(); 

        } 
       } 
      } 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (DOMException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

登錄貓:

07-30 15:20:48.319:W/System.err的(10997): 的java.net.UnknownHostException:www.xxxx.com.br 07-30 15:20:48.319:W/System.err的(10997):在 java.net.InetAddress.lookupHostByName(InetAddress.java:508)07-30 15:20:48.319:W/System.err(10997):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:296) 07-30 15:20:48.319:W/System.err(10997):at java.net.InetAddress.getAllByName(InetAddress.java:258)07-30 15:20:48.319:W/System.err (10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection(HttpConnection.java:69) 07-30 15:20:48.319:W/System.err的(10997 ):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection(HttpConnection.java:48) 07-30 15:20:48.319:W/System.err的(10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection $ Address.connect(H ttpConnection.java:322) 07-30 15:20:48.319:W/System.err的(10997):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool .java:89) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl。 java:285) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java :267) 07-30 15:20:48.319:W/System.err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java: 1018) 07-30 15:20:48.319:W/System .err(10997):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726) 07-30 15:20:48.329:W/System。 err(10997):at tabbar.rss.RssParser.parse(RssParser.java:30)07-30 15:20:48.329: W/System.err(10997):at tabbar.rss.PullToRefreshListActivityRSS.do_update( PullToRefreshListActivityRSS.java:91) 07-30 15:20:48.329:W/System.err(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.doInBackground(PullToRefreshListActivityRSS.java:205) 07-30 15:20 :48.329:W/System.err的(10997):在 tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.doInBackground(PullToRefreshListActivityRSS.java:1) 07-30 15:20:4 8.329:W/System.err(10997):at android.os.AsyncTask $ 2.call(AsyncTask.java:185)07-30 15:20:48.329: W/System.err(10997):at java .util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:306) 07-30 15:20:48.329:W/System.err的(10997):在 java.util.concurrent.FutureTask.run(FutureTask。 java:138)07-30 15:20:48.329:W/System.err(10997):at java.util.concurrent.ThreadPoolExecutor。runWorker(ThreadPoolExecutor.java:1088) 07-30 15:20:48.329:W/System.err(10997):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:581) 07- 30 15:20:48.329:W/System.err(10997):在 java.lang.Thread.run(Thread.java:1019)07-30 15:20:48.329: W/dalvikvm(10997):threadid = 1:線程以未捕獲異常退出 (group = 0x401fc560)07-30 15:20:48.339:E/AndroidRuntime(10997):致命 EXCEPTION:main 07-30 15:20:48.339:E/AndroidRuntime(10997) : java.lang.NullPointerException 07-30 15:20:48.339: E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS.populate_listview(PullToRefreshListActivityRSS.java:101) 07-3 0 15:20:48.339:E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.onPostExecute(PullToRefreshListActivityRSS.java:214) 07-30 15:20:48.339:E/AndroidRuntime(10997):at tabbar.rss.PullToRefreshListActivityRSS $ DoInBackground.onPostExecute(PullToRefreshListActivityRSS.java:1) 07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.AsyncTask.finish(AsyncTask.java:417) 07-30 15:20:48.339: E/AndroidRuntime(10997):at android.os.AsyncTask.access $ 300(AsyncTask.java:127)07-30 15:20:48.339:E/AndroidRuntime(10997) :at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429) 07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.Handler.dispatchMessage(Handler.java:99)07-30 15:20:48.339:E/AndroidRuntime(10997):at android.os.Looper.loop(Looper.java:130)07- 30 15:20:48.339: E/AndroidRuntime(10997):at android.app.ActivityThread.main(ActivityThread.java:3689)07-30 15:20:48.339:E/AndroidRuntime(10997):at java.lang.reflect.Method.invokeNative(Native Method)07-30 15:20:48.339:E/AndroidRuntime(10997):at java.lang.reflect.Method.invoke(Method.java:507)07- 30 15:20:48.339: E/AndroidRuntime(10997):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:875) 07-30 15:20:48.339:E/AndroidRuntime (10997):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)07-30 15:20:48.339:E/AndroidRuntime(10997):at dalvik.system.NativeStart.main(Native Method)

+0

什麼日誌貓說? – MAC 2012-07-30 18:00:59

+0

什麼是錯誤。 – 2012-07-30 18:09:17

+0

已被添加到帖子! – jucajl 2012-07-30 18:22:58

回答

0

你需要給你的asynctask一個超時處理程序,因爲你已經連接但沒有下載任何東西。把超時周邊的3000 - 5000毫秒

如何創建一個超時處理:

Android - Setting a Timeout for an AsyncTask?

+0

我做了以下操作: \t \t do_update(); \t \t嘗試{\t \t DoInBackground.this.get(30000,TimeUnit.MILLISECONDS); \t \t}趕上(InterruptedException的發送){ \t \t \t \t // TODO自動生成的catch程序塊 \t \t \t \t e.printStackTrace(); \t \t}趕上(爲ExecutionException E){ \t \t \t \t // TODO自動生成的catch程序塊 \t \t \t \t e.printStackTrace(); \t \t}趕上(TimeoutException異常E){ \t \t \t // TODO自動生成的catch程序塊 \t \t \t e.printStackTrace(); \t \t} \t}); 適用於在帖子中報告的問題,但是當用戶有連接時他創建了另一個用戶,他希望在AsyncTask中投入時間開始下載Feed:/ – jucajl 2012-07-31 03:39:00

+0

好的,你說它可以阻止你的應用程序打破了,但你又造成了另一個問題?下一個問題是什麼? – Stark 2012-07-31 14:41:26