java - 如何使用带有 urlconnection 的 AsyncTask 来插入返回值?

标签 java android

我想使用 AsyncTask 与服务器连接,但出现错误 ondoInBackground。该错误需要 java.lang.string 那么如何改进 Update() 中的代码?如何在Update()方法中插入“Return”?

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);
    }
}

最佳答案

How to use AsyncTask with urlconnection which requird to insert return

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

也不需要在 Update() 方法中使用另一个 Thread,因为 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);
        }
    }

关于java - 如何使用带有 urlconnection 的 AsyncTask 来插入返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54249091/

相关文章:

java - 配置应用程序登录 ActiveMQ,但 log4j2 失败

android - 如何将消息从一台设备发送到另一台设备

android - Activity 被销毁时服务停止

android - 如何从新 Activity 中打开新的 xamarin.forms

java - JSONArrayRequest 和 PHP 对不起作用

java - 更改数据库后更新 ListView

java - 如何重新启动java程序

java - swt中Scrollable和ScrolledComposite有什么区别?

java - 有没有办法将 ObservableList 绑定(bind)到 ObservableMap?

java - 在 gradle bootRun 期间使用 gradle clean 期间下载的依赖项