java - una - utilidad de las clases abstractas
Looping AsyncTask Class debe declararse abstracto o implementar un método abstracto (3)
Cambia esto
protected String doInBackground(String urls3, String result3)
A
protected String doInBackground(String... args)
Luego declare sus variables como tal dentro de su función doInBackground
String urls3 = args[0];
String result3 = args[1];
También deberá corregir su onPostExecute para
protected void onPostExecute(String result)
Y tu declaración de clase para
private class FetchWebsiteData extends AsyncTask<String, Void, String>
Estoy intentando recorrer algunos registros en mi tabla y para cada registro, use un valor como parámetro para;
- obtener una página web para analizar algunos html
- obtener algunos datos JSON para analizar y obtener un par de valores de
Ambos funcionaron perfectamente por sí solos, pero no puedo lograr que trabajen en un AsyncTask. Tengo el código aquí. Sé que probablemente estoy muy lejos, pero si alguien pudiera darme un empujón sobre cómo mi pensamiento está apagado, realmente lo agradecería.
En la primera linea
private class FetchWebsiteData extends AsyncTask<Void, String, Void> {
yo obtengo
Class FetchWebsiteData must either be declared abstract or implement abstract method doInBackground(params...) in ''AsynTask''
Como un mensaje de error y subrayado en rojo.
private class FetchWebsiteData extends AsyncTask<Void, String, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(summary.this);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
protected String doInBackground(String urls3, String result3) {
helper = new TaskDBHelper(summary.this);
SQLiteDatabase sqlDB = helper.getReadableDatabase();
Cursor dataCount = sqlDB.rawQuery("select TASK from " + TaskContract.TABLE, null);
ArrayList<String> temp = new ArrayList<String>();
dataCount.moveToFirst();
do {
temp.add(dataCount.getString(0));
} while (dataCount.moveToNext());
dataCount.close();
StringBuilder sb = new StringBuilder();
for (String s : temp)
{
wallBal = s;
//--------------------------------------------
try {
Document document = Jsoup.connect(URL+wallBal).get();
Document doc = Jsoup.parse(document.text());
balance = new Double(doc.text());
helper = new TaskDBHelper(summary.this);
SQLiteDatabase sqlDB2 = helper.getWritableDatabase();
String sql9 = String.format("UPDATE " + TaskContract.TABLE + " SET " + TaskContract.Columns.OLDBAL + " = " + TaskContract.TABLE + "." + TaskContract.Columns.BAL + " WHERE task=''" + wallBal + "''");
sqlDB2.execSQL(sql9);
String sql = String.format("UPDATE " + TaskContract.TABLE + " SET " + TaskContract.Columns.BAL + " = " + balance + " WHERE task=''" + wallBal + "''");
sqlDB2.execSQL(sql);
Cursor dataCount2 = sqlDB.rawQuery("select " + TaskContract.Columns.OLDBAL + " from " + TaskContract.TABLE + " WHERE " + TaskContract.Columns.TASK + " = ''" + wallBal + "''", null);
dataCount2.moveToFirst();
oldbalance = dataCount2.getDouble(0);
if(balance != oldbalance) {
make();
}
mProgressDialog.dismiss();
JSONObject json3 = new JSONObject(result3);
String str = "";
JSONArray articles3 = json3.getJSONArray("data");
str += "articles length = "+json3.getJSONArray("data").length();
str += "/n--------/n";
str += "names: "+articles3.getJSONObject(0).getString("MasternodeIP");
str += "/n--------/n";
MNIP = articles3.getJSONObject(0).getString("MasternodeIP");
Sts = articles3.getJSONObject(0).getString("ActiveCount");
helper = new TaskDBHelper(summary.this);
SQLiteDatabase sqlDB22 = helper.getWritableDatabase();
String sql91 = String.format("UPDATE " + TaskContract.TABLE + " SET " + TaskContract.Columns.IP + " = ''" + MNIP + "'' WHERE task=''" + task + "''");
sqlDB22.execSQL(sql91);
String sql10 = String.format("UPDATE " + TaskContract.TABLE + " SET " + TaskContract.Columns.STATUS + " = ''" + Sts + "'' WHERE task=''" + task + "''");
sqlDB22.execSQL(sql10);
updateUI();
} catch (JSONException | IOException e) {
e.printStackTrace();
}
//-----------------------------------------------------
}
//--------------------------------------------------------------------
//return null;
return GET(urls3);
}
protected void onPostExecute(Void result) {
updateUI();
}
}
El método doInBackground
se define así:
protected abstract Result doInBackground (Params... params)
Para anularlo, debe darle la misma lista de parámetros, es decir, un parámetro con tipo Params...
Aquí, Params
, el primer parámetro de tipo de AsyncTask
, es Void
.
Además, el tipo de resultado debe ser Result
, que en este caso es Void
, dado que Result
es el tercer parámetro de tipo de AsyncTask
, y está utilizando Void
como el tercer parámetro.
Entonces, la única forma de escribir un método que anule doInBackground
sería
Void doInBackground(Void... params)
lo que no creo es lo que quieres, ya que pareces querer que los parámetros sean cadenas. Así que creo que deberás cambiar el primer parámetro de tipo de AsyncTask
, que probablemente debería ser
private class FetchWebsiteData extends AsyncTask<String, String, Void> {
Si realmente desea que doInBackground
devuelva una String
, también deberá cambiar el tercer parámetro de tipo ( Result
):
private class FetchWebsiteData extends AsyncTask<String, String, String> {
Además, la lista de parámetros debe tener los mismos tipos; no puede anular el método con
protected String doInBackground(String urls3, String result3)
pero en cambio necesitas
protected String doInBackground(String... params)
Esto parece ser aceptable también:
protected String doInBackground(String[] params)
Si es necesario, verifique en tiempo de ejecución que obtuvo exactamente dos parámetros al marcar params.length
.
Está extendiendo AsyncTask <Void, String, Void> lo que significa que está pasando String ... como argumento para el método doInBackground y el método doInBackground devolverá Void.
Pero, en su código, el método doInBackground devuelve String. Por lo tanto, debe cambiar AsyncTask <Void, String, Void> a AsyncTask <Void, String, String>.
Además, te falta @Override sobre el método doInBackground.
¡Espero eso ayude! :)