Как использовать AsyncTask с urlconnection, который требуется для вставки возврата?

Я столкнулся с этой же проблемой, за исключением того, что принятое решение не применялось, так как все проекты в моем решении были настроены на сбор по всем соответствующим конфигурациям.

В итоге я очень внимательно посмотрел в моем sln-файле и заметил пагубную ошибку слияния, которая мешала MSBuild строить Project2:

Project("{Guid1}") = "Project1", "Project1\Project1.csproj", "{Guid2}"
Project("{Guid1}") = "Project2", "Project2\Project2.csproj", "{Guid3}"
EndProject

. При слиянии после моего последнего git rebase я случайно отрубил EndProject. Добавив его в исправленную проблему, вот так:

Project("{Guid1}") = "Project1", "Project1\Project1.csproj", "{Guid2}"
EndProject
Project("{Guid1}") = "Project2", "Project2\Project2.csproj", "{Guid3}"
EndProject

(я использовал Visual Studio 2015)

0
задан Fantômas 18 January 2019 в 12:16
поделиться

3 ответа

Как использовать AsyncTask с urlconnection, который требует вставки return

Вам нужно вернуть строку в вашем методе Update()

[117 ] Также нет необходимости использовать другой Thread в вашем Update() методе, потому что AsyncTask уже работает в фоновом режиме

SAMPLE CODE

 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);
        }
    }
0
ответ дан Nilesh Rathod 18 January 2019 в 12:16
поделиться
extends AsyncTask<String,Void,String>

Здесь String означает, что AsynkTask ожидает тип String в Return.

protected String doInBackground(String...url) {
    return Update(url[0]);
}

Уже в отдельной теме. Просто удалите его из метода.

пс. Не используйте AsynkTask для соединений с сервером. (это нестабильная вещь с жизненным циклом Activity)

0
ответ дан Artem Winokurov 18 January 2019 в 12:16
поделиться

Используйте приведенный ниже код для запуска AsyncTask:

MyAsyncTask task = new MyAsyncTask();
task.execute(URL);

Обратите внимание: при использовании AsyncTask не следует создавать новую тему в методе Update (URL)

0
ответ дан John Le 18 January 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: