Android HoneyComb Error using Actionbar

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-25 18:31:23

问题


Honeycomb error android.os.NetworkOnMainThreadException after i set my target sdk to 11. I used the below codes to ignore it. Will it effect my app? Can somebody suggest anything to overcome this problem.

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy); 



@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy); 

        ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_SONG);
        // looping through all song nodes <song>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_ID, parser.getValue(e, KEY_ID));
            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
            map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
            map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

            // adding HashList to ArrayList
            songsList.add(map);
        }

回答1:


It is not good practice to do network access on main thread(UI thread).if your target SDK is Honeycomb or higher, it will give network on main thread exception.Try using Asynac tasks to avoid this.

Code EX:

public class yourclass extends Activity{
        @Override
        public void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.uoyrlayout);
        //this is UI thread you should not do network access from here.
        new LongRunning().execute();//call to background thread to do network access
 }
    public class LongRunning extends AsyncTask<Void, Void, Void> {
        protected void onPreExecute() {
            //UI updating goes here before background thread..
        }
        @Override
        protected Void doInBackground(Void... params) {     
            //This is not the UI thread
            //do your network acces
            return null;            
        }

        @Override
        protected void onPostExecute(Void result) {
           //update your UI after background thread
        }

    }
}


来源:https://stackoverflow.com/questions/11980389/android-honeycomb-error-using-actionbar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!