Android NetworkOnMainThreadException
正在尝试读取和解析我的应用程序中的一些json数据。我实现了语法分析器类扩展AsyncTask,如下所示:Android NetworkOnMainThreadException,android,Android,正在尝试读取和解析我的应用程序中的一些json数据。我实现了语法分析器类扩展AsyncTask,如下所示: public class JSONParser extends AsyncTask<Void, Void, String> { private String strUrl; private List<NameValuePair> params; private String result; private String respons
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;
}
}
公共类JSONParser扩展了异步任务{
私有字符串strUrl;
私有列表参数;
私有字符串结果;
私有字符串响应;
公共静态最终字符串结果\u SUCCESS=“SUCCESS”;
公共静态最终字符串结果\u FAILED=“FAILED”;
公共JSONParser(字符串strUrl,列表参数){
this.strUrl=strUrl;
this.params=params;
}
私有void parse(){
试一试{
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(strUrl);
//添加参数
如果(参数!=null){
setEntity(新的UrlEncodedFormEntity(参数));
}
//执行HTTP Post请求
HttpResponse HttpResponse=httpclient.execute(httppost);
//回复返回
结果=结果\成功;
this.response=EntityUtils.toString(httpResponse.getEntity(),“UTF-8”);
}捕获(例外e){
结果=结果_失败;
this.response=null;
e、 printStackTrace();
}
}
@凌驾
公共字符串doInBackground(Void…params){
parse();
返回响应;
}
公共字符串getResult(){
返回结果;
}
公共字符串getResponse(){
返回响应;
}
}
它在以后的android版本中运行良好,但不幸的是,它在旧版本中抛出了NetworkOnMainThreadException
。
我搜索并发现我应该在我的应用程序中使用严格模式,但线程的性能变得非常糟糕!当我点击解析按钮时,它冻结了!
你能帮我找到更好的解决方案吗?这样称呼你的班级,它会解决你的问题
new JSONParser().execute();
如何初始化JSONParser?你叫什么方法?我给你一个提示。它不是新的JSONParser(strurl,params).execute()JsonParser=newjsonparser(strUrl,params);parser.doInBackground()@MahmoudElshamy“从不”明确调用doInBackground()。不应该手动调用它。