AsyncTask: DoInBackground (String ...) collides with DoInBackground (Params ...)?

When I try to use Async task to execute an HTTP message, I get the following:

 ASyncTask: DoInBackground(String...) clashes with DoInBackground(Params...) in Android.os.AsyncTask; attempting to use incompatible return type 

How to fix it? This is my first experience using AsyncTask.

The specific line causing the error:

 @Override protected String doInBackground(String... params) { 

Code from the full AsyncTask:

 private class MyTask extends AsyncTask<String, Void, Void> { boolean success = false; @Override protected String doInBackground(String... params) { StringBuilder respData = new StringBuilder(); URL url = new URL("MY_URL"); URLConnection conn = url.openConnection(); HttpURLConnection httpUrlConnection = (HttpURLConnection) conn; httpUrlConnection.setUseCaches(false); httpUrlConnection.setRequestProperty("User-Agent", "App"); httpUrlConnection.setConnectTimeout(30000); httpUrlConnection.setReadTimeout(30000); httpUrlConnection.setRequestMethod("POST"); httpUrlConnection.setDoOutput(true); OutputStream os = httpUrlConnection.getOutputStream(); //InputStream postStream = toInputStream(toSubmit, "UTF-8"); InputStream stream = new ByteArrayInputStream(toSubmit.getBytes(StandardCharsets.UTF_8)); try { copy(stream, os); } finally { stream.close(); os.flush(); os.close(); } httpUrlConnection.connect(); int responseCode = httpUrlConnection.getResponseCode(); if (200 == responseCode) { InputStream is = httpUrlConnection.getInputStream(); InputStreamReader isr = null; try { isr = new InputStreamReader(is); char[] buffer = new char[1024]; int len; while ((len = isr.read(buffer)) != -1) { respData.append(buffer, 0, len); } } finally { if (isr != null) { isr.close(); success = true; } } is.close(); } else { // use below to get error stream // inputStream = httpUrlConnection.getErrorStream(); } return "done"; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); Toast toast = Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT); } } 
+5
source share
2 answers

Declare your class as follows

 private class MyTask extends AsyncTask<String, Void, String> 

The last parameter is the type that you will return from doInBackground, as well as its entry in onPostExecute.

+7
source

From the documentation for AsyncTask :

An asynchronous task is defined by three types called Params, Progress and Result

Your doInBackground() method returns a String value, but the Result Void parameter in your code. Changing the return doInBackground() value from String to Void will fix the problem - or you can replace <String, Void, Void> with <String, Void, String>

+2
source

Source: https://habr.com/ru/post/1235568/


All Articles