-2
试图读取和解析我的应用程序中的一些json数据。我实现了解析器类扩展的AsyncTask如下:NetworkOnMainThreadException
public class JSONParser extends AsyncTask<Void, Void, String> {
private String strUrl;
private List<NameValuePair> params;
private String result;
private String response;
public static final String RESULT_SUCCESS = "success";
public static final String RESULT_FAILED = "failed";
public JSONParser(String strUrl, List<NameValuePair> params) {
this.strUrl = strUrl;
this.params = params;
}
private void parse() {
try {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(strUrl);
// Add parameters
if (params != null) {
httppost.setEntity(new UrlEncodedFormEntity(params));
}
// Execute HTTP Post Request
HttpResponse httpResponse = httpclient.execute(httppost);
// return by response
result = RESULT_SUCCESS;
this.response = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
} catch (Exception e) {
result = RESULT_FAILED;
this.response = null;
e.printStackTrace();
}
}
@Override
public String doInBackground(Void... params) {
parse();
return response;
}
public String getResult() {
return result;
}
public String getResponse() {
return response;
}
}
它运作良好,在以后的Android版本,但不幸的是它抛出旧版本NetworkOnMainThreadException
。 我搜索了,发现我应该在我的应用程序中使用严格模式,但线程的性能变得非常糟糕!当我点击解析按钮时,它会冻结! 你能帮助我更好的解决方案吗?
如何初始化JSONParser?你打电话给哪些方法?我给你一个提示。它不是'new JSONParser(strurl,params).execute();' – stealthjong 2014-09-04 10:22:38
JsonParser parser = new JsonParser(strUrl,params); parser.doInBackground(); – 2014-09-04 10:25:22
@MahmoudElshamy“从不”显式调用doInBackground()。它不应该被手动调用。 – Jitsu 2014-09-04 10:33:19