Java 如何使用urlconnection的AsyncTask来插入return?

Java 如何使用urlconnection的AsyncTask来插入return?,java,android,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 ur

我想使用
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);
    }
}
public void更新(最终字符串urlString){
新线程(newrunnable()){
公开募捐{
试一试{
URL=新URL(URL字符串);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(connection.getOutputStream(),“UTF-8”);
writer.write(“name=abc”);
writer.close();
int responseCode=connection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
InputStream InputStream=connection.getInputStream();
StringBuilder StringBuilder=新的StringBuilder();
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(inputStream));
而((line=br.readLine())!=null){
stringBuilder.append(行);
}
字符串结果=stringBuilder.toString();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}).start();
}
公共类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…url){
返回更新(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(“标签”,结果);
}
}

使用以下代码启动异步任务:

MyAsyncTask task = new MyAsyncTask();
task.execute(URL);
注意:使用AsyncTask时,不应在Update(URL)方法中创建新线程

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

您需要在
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);
        }
    }
公共字符串更新(最终字符串urlString){
字符串结果=”;
试一试{
URL=新URL(URL字符串);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(connection.getOutputStream(),“UTF-8”);
writer.write(“name=abc”);
writer.close();
int responseCode=connection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
InputStream InputStream=connection.getInputStream();
StringBuilder StringBuilder=新的StringBuilder();
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(inputStream));
而((line=br.readLine())!=null){
stringBuilder.append(行);
}
结果=stringBuilder.toString();
}
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
公共类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…url){
返回更新(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(“标签”,结果);
}
}
已经在一个单独的线程中。只需从方法中删除它

注意:不要将AsynkTask用于与服务器的连接。(在活动生命周期中,这是一件不稳定的事情)

@nameuser如果您觉得它对您有用,请随意使用。
extends AsyncTask<String,Void,String>
protected String doInBackground(String...url) {
    return Update(url[0]);
}