android - thread - AsyncTask: ¿qué parámetros son necesarios para extender y doInBackground?
peticiones asincronas android (2)
¿Qué hay de malo con este código que usa AsyncTask? En particular: - ¿Qué parámetros debo poner en fetchSchools? ¿Qué parámetros debo poner en DoInBackground?
He encontrado muchos ejemplos "útiles", pero todos usan pseudocódigos en estos parámetros y no explican qué es lo que realmente necesito poner allí.
"Obtengo el error de Eclipse, el método fetchSchools debe implementar el método abstracto heredado AsynchTask ..."
No necesito pasar esto, espero que devuelva una cadena.
public class fetchSchools extends AsyncTask<Void, Void, String> {
public String doInBackground(String retval) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.domain/schools.php");
try
{
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String
line;
int a=0;
while ((line = reader.readLine()) != null) {
builder.append(line);
Log.i(MainActivity.class.getName(), "Reading in: " + a +" : "+ line);
a++;
}
} else {
Log.e(MainActivity.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return builder.toString();
}
protected void onPostExecute() {
}
}
No necesito pasar esto, espero que devuelva una cadena.
Entonces
public class fetchSchools extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// ...
}
}
le dio a doInBackground un parámetro de cadena para que el primer parámetro de la tarea async no sea nulo.
AsyncTask<String , Void, String> {
Si no desea pasar un parámetro, no dé el parámetro a la función doInBackground.
consulte esta página para obtener una referencia asynctask: http://developer.android.com/reference/android/os/AsyncTask.html
El primer parámetro de asynctask va a la función doInBackground, el segundo va a la función on progressPlace, tercer parámetro a los enemigos a la función onpostexecute.
Creo que quieres hacer esto:
public class fetchSchools extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... arg0) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
// ...
return builder.toString();
}
protected void onPostExecute(String retval)
{
}
}