NetworkOnMainThreadException при разборе xml с сервера - PullRequest
0 голосов
/ 16 марта 2012

Я хочу проанализировать Xml с сервера, но это займет много времени и, наконец, выдает исключение NetworkOnMainThreadException. Я использую строгий режим, но он все еще вызывает исключение NetworkOnMainThreadException.

Обновление: Я пытаюсь запустить приложение на эмуляторе, это исключение не показывают. это исключение показывают, когда я запускаю приложение на реальном устройстве.

это мой код для разбора xml:

public class ParsingXML extends Thread{
            //private Context ctx;
    private int status;
    private String raw_url;
    Context mctx;
    public DefaultHandler getMyExampleHandler() {
        return myExampleHandler;
    }
    DefaultHandler myExampleHandler=null;

    public ParsingXML(Context ctx , int status){
            //this.ctx=ctx;
            this.status=status;
            this.mctx=ctx;
            if(status==constant.GET_LIST_PRODUCT){
                raw_url=constant.URL+"listBarang.php";
            }
    }
    public ParsingXML(Context ctx,int status,String id){
        this.status=status;
        this.mctx=ctx;
        if(status==constant.GET_DETAIL_PRODUCT){
            raw_url=constant.URL+"detailBarang.php?id="+id;
        }
    }
    public void parse(){    
        try {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
                URL url = new URL(raw_url);

                SAXParserFactory spf = SAXParserFactory.newInstance();
                SAXParser sp = spf.newSAXParser();
                XMLReader xr = sp.getXMLReader();

                if(status==constant.GET_LIST_PRODUCT){
                    myExampleHandler = new ListProductHandler();
                }
                else if(status==constant.GET_DETAIL_PRODUCT){
                    myExampleHandler = new DetailProductHandler();
                }
                xr.setContentHandler(myExampleHandler);

                xr.parse(new InputSource(url.openStream()));

        } catch (Exception e) {
            Toast.makeText(mctx, "Connection Error", Toast.LENGTH_LONG).show();
        }
                /* Display the TextView. */
    }
}

кто-нибудь может мне помочь, пожалуйста ?? любая помощь очень ценится. :)

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Включите ваше сетевое соединение и анализ данных для различных операций на сервере и в отдельном фоновом потоке. Для этого существует вызов класса AsyncTask. Включите ваши фрагменты кода чтения XML в метод doInBackground(). После прочтения всего XML-файла вы можете показать результат в методе onPostExecute().

Использование класса Thread не рекомендуется. Это ссылка на документацию для более подробной информации. Этот процесс избавит вас от NetworkOnMainThreadException.

0 голосов
/ 16 марта 2012

хотя вы расширяете поток, но ваш метод parse также не выполняется в потоке, пожалуйста, поместите метод parse в метод run, например:

public void run(){
    parse();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...