0

我正在使用 XmlPullParserFactory 解析在线 Xml 并在列表视图中显示详细信息。我已经设置了检查互联网的条件,但有时获取数据和崩溃需要时间。我正在使用的代码如下。

      private void runningABackProcess() {
      Handler mHandler = new Handler(Looper.getMainLooper());
      Runnable myRunnable = new Runnable() {                        
      public void run() {
       try{
             //Thread.sleep(5000);

         new DoSomeTask().execute();                           

                  }catch(Exception e){}
                           // myPd_ring.dismiss();
              }
           };
           mHandler.post(myRunnable);

    }
         private class DoSomeTask extends AsyncTask<Void, Void, Void>
     {


        @Override
         protected Void doInBackground(Void... arg0) {
                        try { 
         isInternetPresent = icd.isConnectingToInternet
         if(isInternetPresent){                             
              URL url = new     URL("njhgjghjkjhkjl");                                 
              XmlPullParserFactory factory=XmlPullParserFactory.newInstance();  
              XmlPullParser xpp=factory.newPullParser();      
              xpp.setInput(getInputStream(url), "UTF_8");                                   
              int eventType=xpp.getEventType(); 
              if(eventType!=XmlPullParser.END_DOCUMENT)
                  {
            if(eventType==XmlPullParser.START_DOCUMENT)     
                 {       
                 while(eventType!=XmlPullParser.END_DOCUMENT )              
                  {              
                              xpp_name=xpp.getName();                                   
                      if((xpp_name!=null) ) 
                                {
                                   --------------------
                                   -------------------------
                                }
                            }
                    }
               }

      public InputStream getInputStream(URL url) {
  try {  
       InputStream str=null;
       isInternetPresent=icd.isConnectingToInternet();
      if(isInternetPresent)
           {    
         str=url.openConnection().getInputStream(); 
         if(str!= null)
             {
             return str; 
          }else{
         new AlertDialogBox(getActivity()).show(getFragmentManager(),"MyDialog");
          }
    }else{
    new AlertDialogBox(getActivity()).show(getFragmentManager(), "MyDialog");
                            }
                                return    str;              
                            //}
                        } catch (IOException e) {

                            return null;
                          }

                     }

以下是我得到的错误: 在此处输入图像描述

4

2 回答 2

0

我通过改变解决了这个问题

 xpp.setInput(getInputStream(url), "UTF_8"); to 
 xpp.setInput(url.openConnection().getInputStream(), "UTF_8");
于 2013-08-12T10:34:11.207 回答
0

这似乎是 NetworkOnMainThreadException。在这种情况下,要解决它,请使用 AsyncTask 运行访问网络的代码。

它是由于在主 UI 线程上访问网络或网络相关任务而导致的。这有时可能会挂起或崩溃您的应用程序;冻结您的应用程序一段时间。这就是为什么建议您使用 AsyncTask 来解决此问题。

如何使用 AysncTask,从这里阅读非常简单:

http://developer.android.com/reference/android/os/AsyncTask.html

或者您可以在代码中添加这一行,以允许在主线程上进行网络访问:

// Allow network thread to avoid NetworkOnMainThreadException.

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
        .permitAll().build();
StrictMode.setThreadPolicy(policy);
于 2013-08-07T18:31:12.647 回答