
Originariamente inviata da
andbin
È (forse) questa
AsyncHttpResponseHandler?
È una classe concreta e sembra abbastanza articolata. Non è quindi una interfaccia o un semplice "adapter" con metodi "vuoti".
Innanzitutto, ammesso che poi tu possa estendere questa AsyncHttpResponseHandler nella tua classe, devi anche verificare se è concettualmente corretto ri-usare lo stesso oggetto (la istanza della tua classe) come "handler". Questa AsyncHttpResponseHandler sembra non avere "stato" e la documentazione linkata non parla riguardo thread-safety o possibile riuso. Dice però espressamente: "
is designed to be anonymously overridden".
grazie andbin, ho capito.
Ti spiego quello che voglio fare :
Ho una serie di chiamate asincrone (6 chiamate) e ognuna deve fare delle cose diverse, anche se tutte devono leggere un json(da un web service), e inserire su db dei dati (quelli nel json).
Ho provato a fare cosi:
Ho ereditato 6 classi da AsyncHttpResponseHandler e ogni classe delle 6 gestisce autonomamente cio che deve gestire
codice:
public class Category extends AsyncHttpResponseHandler{
public void onSuccess(String response) {
//gestione category
}
gestire , poi passo la mia classe
codice:
client.get(url,miaclassehandler)
ed effettivamente le callback sono richiamate correttamente nelle mie classi.
Il problema è che essendo delle chiamate asincrone viene creato un thread per ogni callback e non voglio creare troppi thread vorrei eseguire una classe e una chiamata per volta.
per fare questo devo lanciare la chiamata successiva alla fine della callback che gestisce l'iserimento dati ma mi piace poco per cui pensavo di creare una classe Syncronization principale che gestisce tutte le operazioni di sincronizzazione e creare in questa classe una funzione pubblica NextSync e un arraylist di classi handler(tutte le classi che devo usare) cosi:
codice:
private int index;
public void NextSync()
{
if(index <arrray.count){
handler = array[index];
handler.setSyncClass(this);
client.get(handler.url, handler);
index++;
}
}
e negli handler semplicemente
codice:
Activity m_act;
public void onSuccess(String response) {
//gestisco e alla fine della gestione
m_act.NextSync();
}
// callback chiamata quando la connessione fallisce
@Override
public void onFailure(Throwable e, String response) {
//errore
}
cosi posso cambiare semplicemente l'ordine di esecuzione ordinando l'array di handler come mi pare e aggiungere un nuovo handler semplicemente creando una nuova classe handler e inserirla nella arraylist.
troppo cervellotico forse?
ciao,
ps.
devo gestire le chiamate in modo asincrono perche sono su android e possono nascere casini a bloccare l'esecuzione del processo per molto tempo.