サーバから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