Android NetworkOnMainThreadException

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

正在尝试读取和解析我的应用程序中的一些json数据。我实现了语法分析器类扩展AsyncTask,如下所示:

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()。不应该手动调用它。