Android Runtimeexception:执行doinbackground时发生错误

时间:2013-08-07 12:12:14

标签: android xml-parsing runtimeexception xmlpullparser

我使用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;
                          }

                     }

以下是我得到的错误: enter image description here

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我通过更改

解决了这个问题
 xpp.setInput(getInputStream(url), "UTF_8"); to 
 xpp.setInput(url.openConnection().getInputStream(), "UTF_8");