서버에서 Xml을 구문 분석하려고하지만 시간이 오래 걸리고 마지막으로 NetworkOnMainThreadException이 발생합니다. 엄격 모드를 사용하고 있지만 여전히 NetworkOnMainThreadException을 나타냅니다.서버에서 XML을 구문 분석 할 때 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. */
}
}
누군가가 제발 도와 수 있습니까 ?? 도움이 매우 감사합니다. :)
업데이트가 나중에 보입니다. 플랫폼 3보다 높은 장치에서 코드를 실행하고있는 것 같습니다. 인터넷 연결을 위해 백그라운드 스레드를 사용하지 않을 때는'NetworkOnMainThreadException'을 제공합니다. – AnujAroshA
그래서 어떻게해야합니까 ??? 나는 스레드를 사용하고 있지만 여전히 예외를 발생시킨다. ,, – ZeeDroid
스레드 클래스를 사용하지 말고 대신 AsyncTask 클래스를 사용한다. 그리고'doInBackground' 메소드에서 XML 구문 분석과 같은 모든 백그라운드 작업을 수행하십시오. – AnujAroshA