Visualizzazione dei risultati da 1 a 5 su 5

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [java]set callbak in java

    ciao , ho questo codice:
    codice:
    AsyncHttpClient client = new AsyncHttpClient();
          
            String url = "http://10.0.2.2/test/sonata/web/app_dev.php/users";
            // eseguo la richiesta get passando url e creando le callback
            client.get(url, new AsyncHttpResponseHandler() {
                // callback chiamata quando la connessione termina con successo
                @Override
                public void onSuccess(String response) {
                    String str = response;
                  
                }
    
                // callback chiamata quando la connessione fallisce
                @Override
                public void onFailure(Throwable e, String response) {
           
                    
                }
            });
    è un client asincrono che si connette via http e se tutto va a buon fine chiama la callback onSuccess altrimenti la onFailure.
    vorrei invece che definire le callback all interno dello scope dell handler settarle semplicemente dove sono ad es nella classe stessa.
    ho provato qualcosa tipo
    codice:
    new AsyncHttpResponseHandler(this)
    e definire le due callback nella classe, ma non va.

    grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giuseppe500 Visualizza il messaggio
    vorrei invece che definire le callback all interno dello scope dell handler settarle semplicemente dove sono ad es nella classe stessa.
    ho provato qualcosa tipo
    codice:
    new AsyncHttpResponseHandler(this)
    No, premetto che non conosco le classi che sono mostrate nel sorgente ma AsyncHttpResponseHandler presumo sia una interfaccia o classe (astratta?). E pertanto se vuoi che AsyncHttpResponseHandler sia implementata nella tua classe dove hai tutto quello, devi dichiarare ovviamente che la tua classe implements AsyncHttpResponseHandler (se interfaccia) o extends AsyncHttpResponseHandler (se classe) e poi fai:

    client.get(url, this);

    E ovviamente onSuccess/onFailure saranno "membri" della tua classe.
    Ultima modifica di andbin; 21-11-2013 a 11:38
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    È (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".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Quote Originariamente inviata da andbin Visualizza il messaggio
    È (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.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    un solo problema, dato che non sono pratico di java : devo creare un interfaccia col mio metodo NextSync forse? è poi come faccio ? devo fare il cast sull' interfaccia per richiamare il metodo ?
    Altrimenti tutto funziona solo per la mia classe principale.
    non so chiedo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.