Android Asynctask 中的 NetworkOnMainThreadException class

Android NetworkOnMainThreadException inside Asyntask class

此代码显示了到达 get 语句时的异常(代码行注释)。 接下来是代码,包括从 Http get Request:

获取评论列表
public class ObtencionComentariosPerfil extends AsyncTask<String, Integer, List<Comment>>{

@Override
protected List<Comment> doInBackground(String... params) {
    // TODO Auto-generated method stub
    HttpClient httpClient = new DefaultHttpClient();
    URI url;
    List<Comment> listaComentarios = new ArrayList<Comment>();

    try {
        url = new URI(params[1]);
        HttpGet del = new HttpGet(url);
        del.setHeader("content-type", "application/json");
        del.setHeader("X-Auth-Token", params[0]);
        System.out.println("El token params es: "+params[0]);

        HttpResponse resp = httpClient.execute(del);// THE EXCEPTION shows here
        StatusLine estatus = resp.getStatusLine(); 

        if (estatus.getStatusCode() == 200) {
            InputStream is = resp.getEntity().getContent();
            CommentsParser parser= new CommentsParser();
            listaComentarios = parser.parseoComentarios(is.toString());
        } else {
            System.out.println("Error");
            listaComentarios = null;
        }


    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return listaComentarios;
}
@Override
protected void onPostExecute(List<Comment> lista){

}

}

这里是从主代码调用的:

public List<Comment> obtieneComentariosPerfil(long idUsuario, String aut){
    List<Comment> listaComentarios = new ArrayList<Comment>();
    String url= "http://"+ip+":8080/api/users/"+idUsuario+"/comments";
    String[] params= new String[2];
    params[0]=aut;
    params[1]=url;
    ObtencionComentariosPerfil du = new ObtencionComentariosPerfil();
    listaComentarios = du.doInBackground(params);

    return listaComentarios;
}

我认为这一定是一个愚蠢的失败,但我找不到错误。谢谢

listaComentarios = du.doInBackground(params);

您通过调用 execute() 提交异步任务以在后台线程中执行,而不是通过在当前线程中直接调用 doInBackground() 回调。

将结果传回 onPostExecute() 中的 UI 线程。

因为你打电话给du.doInBackground(params);

你应该打电话给 du.excute(params)