Android异步任务冻结用户界面

Android异步任务冻结用户界面,android,user-interface,android-asynctask,freeze,Android,User Interface,Android Asynctask,Freeze,我正在尝试从服务器获取数据。尽管我用doinbackground方法连接和提取数据,但UI还是冻结了。如果有人能帮助我,我将不胜感激,因为我检查了关于这个主题的所有问题,但没有找到解决方案 public class GetMessagesActivity extends AsyncTask<String, Void, String> { private Context context; private ProgressDialog progressDialog;

我正在尝试从服务器获取数据。尽管我用doinbackground方法连接和提取数据,但UI还是冻结了。如果有人能帮助我,我将不胜感激,因为我检查了关于这个主题的所有问题,但没有找到解决方案

public class GetMessagesActivity extends AsyncTask<String, Void, String> {
    private Context context;

    private ProgressDialog progressDialog;

    public GetMessagesActivity(Context context) {

        this.context = context;
        this.progressDialog = new ProgressDialog(context);
        this.progressDialog.setCancelable(false);
        this.progressDialog.setMessage("Updating...");
        this.progressDialog.show();

    }

    protected void onPreExecute() {
    }

    @Override
    protected String doInBackground(String... arg0) {
        try {
            String pid = "1";
            String link = "somelink";
            String data = URLEncoder.encode("pid", "UTF-8") + "="
            + URLEncoder.encode(pid, "UTF-8");
            // data += "&" + URLEncoder.encode("password", "UTF-8")
            // + "=" + URLEncoder.encode(password, "UTF-8");
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(
            conn.getOutputStream());
            wr.write(data);
            wr.flush();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;
            // Read Server Response
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                break;
            }

            return sb.toString();
        } catch (Exception e) {
            return new String("Exception: " + e.getMessage());
        }
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result) {
        if (this.progressDialog != null) {
            this.progressDialog.dismiss();
        }
    }
}
公共类GetMessagesActivity扩展了异步任务{
私人语境;
私有进程对话;
公共GetMessagesActivity(上下文){
this.context=上下文;
this.progressDialog=新建progressDialog(上下文);
this.progressDialog.setCancelable(false);
这个.progressDialog.setMessage(“更新…”);
这个.progressDialog.show();
}
受保护的void onPreExecute(){
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
试一试{
字符串pid=“1”;
String link=“somelink”;
字符串数据=URLEncoder.encode(“pid”,“UTF-8”)+“=”
+编码(pid,“UTF-8”);
//数据+=“&”+URLCoder.encode(“密码”,“UTF-8”)
//+“=”+URLEncoder.encode(密码为“UTF-8”);
URL=新的URL(链接);
URLConnection conn=url.openConnection();
连接设置输出(真);
OutputStreamWriter wr=新的OutputStreamWriter(
conn.getOutputStream());
wr.写入(数据);
wr.flush();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
conn.getInputStream());
StringBuilder sb=新的StringBuilder();
字符串行=null;
//读取服务器响应
而((line=reader.readLine())!=null){
某人附加(行);
打破
}
使某人返回字符串();
}捕获(例外e){
返回新字符串(“异常:+e.getMessage());
}
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串结果){
如果(this.progressDialog!=null){
此.progressDialog.discouse()文件;
}
}
}

您可能误用了异步任务。你应该这样称呼它:

  new YourAsyncTask().execute();
如果您这样调用:“new YourAsyncTask().get()”,它将阻止UI线程

请参见此处的一些用法参考:
您可能误用了异步任务。你应该这样称呼它:

  new YourAsyncTask().execute();
如果您这样调用:“new YourAsyncTask().get()”,它将阻止UI线程

请参见此处的一些用法参考:

您尚未展示如何执行任务。我想试试看,您正在使用
get()
来阻止调用线程。您是对的。我删除了get()并使用了execute(),它工作得非常好。非常感谢你,你还没有展示你是如何执行任务的。我想试试看,您正在使用
get()
来阻止调用线程。您是对的。我删除了get()并使用了execute(),它工作得非常好。非常感谢你