首页 > 解决方案 > 如何使用带有插入返回所需的 urlconnection 的 AsyncTask?

问题描述

我想用来AsyncTask连接服务器,但出现错误ondoInBackground。该错误要求java.lang.string我如何改进代码Update()?如何在Update()方法中插入“返回”?

public void Update(final String urlString){
    new Thread(new Runnable() {
        public void run() {
            try {
                URL url = new URL(urlString);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setUseCaches(false);
                connection.connect();

                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
                writer.write("name=abc");
                writer.close();

                int responseCode = connection.getResponseCode();
                if(responseCode == HttpURLConnection.HTTP_OK){
                    InputStream inputStream = connection.getInputStream();

                    StringBuilder stringBuilder = new StringBuilder();
                    String line;

                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                    while ((line = br.readLine()) != null) {
                        stringBuilder .append(line);
                    }
                     String result = stringBuilder .toString();
                }
            } catch (Exception e) {
                e.printStackTrace();        
            }
        }
    }).start();
}

public class MyAsyncTask extends AsyncTask<String,Void,String> {
    @Override
    protected void onPreExecute(){
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String...url) {
        return Update(url[0]);
    }
    @Override
    protected void onPostExecute(String result){
        Log.d("TAG", result);
    }
}

标签: javaandroid

解决方案


如何将 AsyncTask 与需要插入返回的 urlconnection 一起使用

您需要在Update()方法中返回一个字符串

也无需Thread在您的Update()方法中使用另一个,因为AsyncTask已经在后台运行

示例代码

 public String Update(final String urlString){

        String result="";

        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.connect();

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
            writer.write("name=abc");
            writer.close();

            int responseCode = connection.getResponseCode();
            if(responseCode == HttpURLConnection.HTTP_OK){
                InputStream inputStream = connection.getInputStream();

                StringBuilder stringBuilder = new StringBuilder();
                String line;

                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                while ((line = br.readLine()) != null) {
                    stringBuilder .append(line);
                }
                result = stringBuilder .toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    public class MyAsyncTask extends AsyncTask<String,String,String> {
        @Override
        protected void onPreExecute(){
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String...url) {
            return Update(url[0]);
        }
        @Override
        protected void onPostExecute(String result){
            Log.d("TAG", result);
        }
    }

推荐阅读