Autore Topic: Chiamare un web service da un fragment  (Letto 1870 volte)

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Chiamare un web service da un fragment
« il: 31 Gennaio 2014, 20:11:18 CET »
0
Ciao a tutti,
sono nuovo della programmazione in android e alla prima con i fragment ( sto utilizzando la libreria sherlock);
indico il mio problema:
ho una activity che estende la SherlockFragmentActivity con diverse pagine (diversi tab nel fragment) con dentro una sottoclasse che estende  Fragment, a secondo del numero di tab attivo (visualizzato a schermo) vorrei chiamare un web service che sta in ascolto; tutta la parte che riguarda il web service, la chiamata, ecc non è un problema.
Vorrei chiedere se sapreste indicarmi dove dovrei mettere la parte relativa alla chiamata al web service, che farei con un task asincrono (con i metodi doInBackground, onPostExecute ecc..), nel codice relativo alla activity o in quella dei fragment? e in questo secondo caso esiste un modo di trasferire informazioni dalla activity al particolare fragment? (in base al tab attivo cambia la query fatta al web service, e la sua risposta deve essere visualizzata sul fragment come tabella)

Nella classe che estende Fragment per ora uso solo un onCreateView che se non ho capito male serve solo per creare l'interfaccia nella tab attiva.


(ho fatto una domanda simile in un'altra parte del forum, qui: Costruire una tabella di risultati dentro un fragment - Android Developers Italia
ma credo sia una sezione sbagliata per cui chiedo agli admin di eliminarla, non so se posso farlo direttamente io)

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Chiamare un web service da un fragment
« Risposta #1 il: 31 Gennaio 2014, 20:24:21 CET »
0
Ciao a tutti,
sono nuovo della programmazione in android e alla prima con i fragment ( sto utilizzando la libreria sherlock);
indico il mio problema:
ho una activity che estende la SherlockFragmentActivity con diverse pagine (diversi tab nel fragment) con dentro una sottoclasse che estende  Fragment, a secondo del numero di tab attivo (visualizzato a schermo) vorrei chiamare un web service che sta in ascolto; tutta la parte che riguarda il web service, la chiamata, ecc non è un problema.
Vorrei chiedere se sapreste indicarmi dove dovrei mettere la parte relativa alla chiamata al web service, che farei con un task asincrono (con i metodi doInBackground, onPostExecute ecc..), nel codice relativo alla activity o in quella dei fragment? e in questo secondo caso esiste un modo di trasferire informazioni dalla activity al particolare fragment? (in base al tab attivo cambia la query fatta al web service, e la sua risposta deve essere visualizzata sul fragment come tabella)

Nella classe che estende Fragment per ora uso solo un onCreateView che se non ho capito male serve solo per creare l'interfaccia nella tab attiva.


(ho fatto una domanda simile in un'altra parte del forum, qui: Costruire una tabella di risultati dentro un fragment - Android Developers Italia
ma credo sia una sezione sbagliata per cui chiedo agli admin di eliminarla, non so se posso farlo direttamente io)

il mio consiglio è utilizzare la libreria Async Http Client, io la uso con il mio Web Services

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #2 il: 01 Febbraio 2014, 01:55:45 CET »
+1
Dipende da quello che devi fare.
Caso 1: la query da fare è diversa per ogni tab, ma l'interfaccia dei vari fragment è la stessa (stesse view, stesse colonne per la tabella in cui visualizzare i dati). In questo caso farei un solo fragment. La richiesta la farei fare all'activity ed una volta elaborato il risultato si può creare il fragment passando i relativi dati ad esso. Il fragment (dato che non deve preoccuparsi di quale caso si tratta) si limita a visualizzare i dati.
Caso 2 : la query è diversa per ogni tab e anche l'interfaccia per i vari fragment è diversa (diverse view, tabella con struttura diversa). In questo caso farei fare tutto al fragment. Richiesta e visualizzazione dei dati.

Nel caso 1, nell'activity dopo aver prelevato i dati dal web service, dovresti passarli al fragment in questo modo:
Codice (Java): [Seleziona]
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment fragment = new MyFragment(theFetchedData);
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
"MyFragment" è la classe del fragment, e "theFetchedData" sono i dati prelevati dal web service.

Ovviamente nel costruttore di MyFragment dovrai salvare opportunamente l'oggetto "theFetchedData" come variabile dell'oggetto fragment
Codice (Java): [Seleziona]
this.mFetchedData = theFetchedDatain modo da utilizzarlo nel metodo onCreateView.

Spero di aver capito il tuo problema e di esserti stato d'aiuto.
« Ultima modifica: 01 Febbraio 2014, 01:58:22 CET da ciccio »

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #3 il: 01 Febbraio 2014, 10:55:48 CET »
0
il mio consiglio è utilizzare la libreria Async Http Client, io la uso con il mio Web Services
la uso, il mio dubbio è sul dove usarla

ciccio grazie mille!il mio è proprio il primo caso, quindi credo di avere capito che mi conviene mettere la query nell'activity (nell'onCreate?o forse meglio in un metodo chiamato dall'onCreate?), una cosa non ho chiara però:
io in questo momento ho diversi fragment, ognuno con un "titolo" diverso che compare nell'action bar (rigo azzurro nell'immagine), creando un solo fragment la possibilità di avere questa distinzione rimane? (credo sia una domanda stupida, ma essendo la prima volta che ci ho a che fare meglio chiedere)
infine, se ho un fragment solo, cambiando pagina la query come viene chiamata se si trova su un metodo dell'activity ospitante?

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #4 il: 01 Febbraio 2014, 15:49:31 CET »
0
  • Ti conviene fare la chiamata alla fine del metodo onCreate, ovvero dopo avere istanziato le view di cui hai bisogno.
  • La distinzione rimane perché hai una sola classe per il fragment ma gli oggetti devono essere diversi
  • Nell'activity devi implementare un TabListener che allo swype fa corrispondere la creazione di un nuovo fragment. In quel frangente o fai la chiamata asincrona, al termine della quale crei il fragment passandogli i dati già recuperati, oppure istanzi il fragment passandogli il titolo (che serve a discriminare dove ti trovi) e l'url da chiamare per prelevare i dati e nella onCreateView del fragment prelevi appunto i dati facendo la richiesta asincrona.

Spero di essere stato abbastanza chiaro, è un po' un casino a spiegarlo a parole XD

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #5 il: 01 Febbraio 2014, 16:19:11 CET »
0
Vediamo se ho capito bene, questo è il codice che ho finora

Codice (Java): [Seleziona]
public class SerieA_Activity extends SherlockFragmentActivity {
       
        CollectionPagerAdapter mCollectionPagerAdapter;
    ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_serie_a);
    // Crea un adattatore che, quando richiesto, tornerà un fragment che rappresenta un oggetto della collezione.
    // ViewPager e i suoi adapter utilizzano support library fragment, quindi dobbiamo usare getSupportFragmentManager.
        mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager());
    // Imposto la action bar.
        final ActionBar actionBar = getSupportActionBar();
    // Specifico che il tasto in alto a sinistra è cliccabile,
    // toccando il pulsante l'utente salirà di un gradino nella gerarchia dell'applicazione.
        actionBar.setDisplayHomeAsUpEnabled(true);
    // Imposto la ViewPager, attaccandogli gli adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mCollectionPagerAdapter);

----- QUA DOVREI METTERE LA CREAZIONE DEL TASK ASINCRONO CHE MI PERMETTE DI CONTATTARE IL SERVER -------------------- #1

---- POI QUA METTO UN TABLISTNER CHE SI OCCUPA DI INSTANZIARE UN NUOVO FRAGMENT ------------------------------------- #2
    }
   
    public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
        final int NUM_ITEMS = 38; // numbero di tabs --> una per giornata, la serie A ne ha 38
       
        public CollectionPagerAdapter(FragmentManager fm) {
                super(fm);
        }
       
        @Override
        public Fragment getItem(int i) {
                Fragment fragment = new TabFragment();
                Bundle args = new Bundle();
                args.putInt(TabFragment.ARG_OBJECT, i);
                fragment.setArguments(args);
                return fragment;
        }

        @Override
        public int getCount() {
                return NUM_ITEMS;
        }
       
        @Override
        public CharSequence getPageTitle(int position) {
                String tabLabel = null;
                // position contiene il numero del tab attivo (ovvero la giornata da visualizzare)
                // parte da 0, quindi per un totale di giornate - 1
                switch (position) {
                        case 0:
                                tabLabel = getString(R.string.giornata1);
                                break;
                        case 1:
                                tabLabel = getString(R.string.giornata2);
                                break;
                        case 2:
                                tabLabel = getString(R.string.giornata3);
                                break;
                        case 3:
                                tabLabel = getString(R.string.giornata4);
                                break;
                        case 4:
                                tabLabel = getString(R.string.giornata5);
                                break;
                        case 5:
                                tabLabel = getString(R.string.giornata6);
                                break;
                        case 6:
                                tabLabel = getString(R.string.giornata7);
                                break;
                        case 7:
                                tabLabel = getString(R.string.giornata8);
                                break;
                        case 8:
                                tabLabel = getString(R.string.giornata9);
                                break;
                        case 9:
                                tabLabel = getString(R.string.giornata10);
                                break;
                        case 10:
                                tabLabel = getString(R.string.giornata11);
                                break;
                        case 11:
                                tabLabel = getString(R.string.giornata12);
                                break;
                        case 12:
                                tabLabel = getString(R.string.giornata13);
                                break;
                        case 13:
                                tabLabel = getString(R.string.giornata14);
                                break;
                        case 14:
                                tabLabel = getString(R.string.giornata15);
                                break;
                        case 15:
                                tabLabel = getString(R.string.giornata16);
                                break;
                        case 16:
                                tabLabel = getString(R.string.giornata17);
                                break;
                        case 17:
                                tabLabel = getString(R.string.giornata18);
                                break;
                        case 18:
                                tabLabel = getString(R.string.giornata19);
                                break;
                        case 19:
                                tabLabel = getString(R.string.giornata20);
                                break;
                        case 20:
                                tabLabel = getString(R.string.giornata21);
                                break;
                        case 21:
                                tabLabel = getString(R.string.giornata22);
                                break;
                        case 22:
                                tabLabel = getString(R.string.giornata23);
                                break;
                        case 23:
                                tabLabel = getString(R.string.giornata24);
                                break;
                        case 24:
                                tabLabel = getString(R.string.giornata25);
                                break;
                        case 25:
                                tabLabel = getString(R.string.giornata26);
                                break;
                        case 26:
                                tabLabel = getString(R.string.giornata27);
                                break;
                        case 27:
                                tabLabel = getString(R.string.giornata28);
                                break;
                        case 28:
                                tabLabel = getString(R.string.giornata29);
                                break;
                        case 29:
                                tabLabel = getString(R.string.giornata30);
                                break;
                        case 30:
                                tabLabel = getString(R.string.giornata31);
                                break;
                        case 31:;
                                tabLabel = getString(R.string.giornata32);
                                break;
                        case 32:
                                tabLabel = getString(R.string.giornata33);
                                break;
                        case 33:
                                tabLabel = getString(R.string.giornata34);
                                break;
                        case 34:
                                tabLabel = getString(R.string.giornata35);
                                break;
                        case 35:
                                tabLabel = getString(R.string.giornata36);
                                break;
                        case 36:
                                tabLabel = getString(R.string.giornata37);
                                break;
                        case 37:
                                tabLabel = getString(R.string.giornata38);
                                break;
                        default:
                                Toast.makeText(SerieA_Activity.this, "Errore nell'individuare la giornata", Toast.LENGTH_SHORT).show();
                                finish();
                    }
                    return tabLabel;
            }
       
       
    }

    public static class TabFragment extends Fragment {
        public static final String ARG_OBJECT = "object";
       
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                Bundle args = getArguments();
                int position = args.getInt(ARG_OBJECT);
                int tabLayout = 0;
                switch (position) {
                        case 0:
                        case 1:
                        case 2:
                        case 3:
                        case 4:
                        case 5:
                        case 6:
                        case 7:
                        case 8:
                        case 9:
                        case 10:
                        case 11:
                        case 12:
                        case 13:
                        case 14:
                        case 15:
                        case 16:
                        case 17:
                        case 18:
                        case 19:
                        case 20:
                        case 21:
                        case 22:
                        case 23:
                        case 24:
                        case 25:
                        case 26:
                        case 27:
                        case 28:
                        case 29:
                        case 30:
                        case 31:
                        case 32:
                        case 33:
                        case 34:
                        case 35:
                        case 36:
                        case 37:
                                tabLayout = R.layout.tab_serie_a;
                                break;
                }
         
                View rootView = inflater.inflate(tabLayout, container, false);
                return rootView;
            }
       
    }

       
        }
}

è corretto?
mettendo il #2 ogni volta che si esegue lo swipe viene eseguito il #1?
il #2 a quanto ho capito deve avere al suo interno la chiamata al getItem mi sembra a questo punto

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #6 il: 01 Febbraio 2014, 16:42:08 CET »
+1
No. Con il codice che mi hai mandato il #2 non serve proprio dato che viene fatto nel getItem() (che viene chiamato in automatico nello swype). Il #1 invece lo metterei direttamente nella onCreateView del TabFragment. Tanto l'unica cosa che ti serve è il numero della giornata. Eliminerei lo switch (sempre nel fragment) dato che non ti serve a niente. La tua chiamata sarà ad un url del tipo:
Codice (Java): [Seleziona]
"http://miosito.org/getGiornate?giornata="+positionAl ritorno della chiamata popoli le varie view del fragment.

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #7 il: 01 Febbraio 2014, 16:49:47 CET »
0
ok grazie davvero!provo subito a farlo, speriamo bene!

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #8 il: 01 Febbraio 2014, 17:11:13 CET »
0
Probabilmente ti ho detto qualcosa di sbagliato sul TabListener. Per evitare problemi segui questa guida:
http://developer.android.com/training/implementing-navigation/lateral.html

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #9 il: 01 Febbraio 2014, 18:03:46 CET »
0
do una occhiata

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #10 il: 04 Febbraio 2014, 21:13:55 CET »
0
ho provato a mettere il task sincrono e tutta la relativa gestione nella classe TabFragment come indicato ma sto ottenendo un errore strano (non arriva a fare nemmeno la chiamata, posto il codice (è un pò lungo), l'errore è dato qui:

           mGiornataStatusMessageView.setText(R.string.recupero_progress_signing_in);

pare che questo non viene eseguito:
mGiornataStatusMessageView = (TextView) getActivity().findViewById(R.id.download_giornata_status_message);

(tutti gli id sono giusti)


Codice (Java): [Seleziona]
public class SerieA_Activity extends SherlockFragmentActivity {
       
        //costanti
        private final int SERIEA = 3;   //costanti che serve come ID per startActivity(int),
                                                                        //è lo stesso valore che in ActivityClientSceltaCategoria.java

        CollectionPagerAdapter mCollectionPagerAdapter;
    ViewPager mViewPager;
    private static String giornata = "0";
   
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_serie_a);
    // Crea un adattatore che, quando richiesto, tornerà un fragment che rappresenta un oggetto della collezione.
       
    // ViewPager e i suoi adapter utilizzano support library fragment, quindi dobbiamo usare getSupportFragmentManager.
        mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager());
    // Imposto la action bar.
        final ActionBar actionBar = getSupportActionBar();
    // Specifico che il tasto in alto a sinistra è cliccabile,
    // toccando il pulsante l'utente salirà di un gradino nella gerarchia dell'applicazione.
        actionBar.setDisplayHomeAsUpEnabled(true);
    // Imposto la ViewPager, attaccandogli gli adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mCollectionPagerAdapter);
       
    //  context = getApplicationContext ();
       
    }
   
    protected static String getNumGiornata(){
        return giornata;
    }
   
    private static void setNumGiornata(String g){
        giornata = g;
    }
   
    public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
        final int NUM_ITEMS = 38; // numbero di tabs --> una per giornata, la serie A ne ha 38
       
        public CollectionPagerAdapter(FragmentManager fm) {
                super(fm);
        }
       
        @Override
        public Fragment getItem(int i) {
                Fragment fragment = new TabFragment();
                Bundle args = new Bundle();
                args.putInt(TabFragment.ARG_OBJECT, i);
                fragment.setArguments(args);
                return fragment;
        }

        @Override
        public int getCount() {
                return NUM_ITEMS;
        }
       
        @Override
        public CharSequence getPageTitle(int position) {
                String tabLabel = null;
                // position contiene il numero del tab attivo (ovvero la giornata da visualizzare)
                // parte da 0, quindi per un totale di giornate - 1
                switch (position) {
                        case 0:
                                tabLabel = getString(R.string.giornata1);
                                setNumGiornata("1");
                                break;
                        case 1:
                                tabLabel = getString(R.string.giornata2);
                                setNumGiornata("2");
                                break;
                        case 2:
                                tabLabel = getString(R.string.giornata3);
                                setNumGiornata("3");
                                break;
                        case 3:
                                tabLabel = getString(R.string.giornata4);
                                setNumGiornata("4");
                                break;
                        case 4:
                                tabLabel = getString(R.string.giornata5);
                                setNumGiornata("5");
                                break;
                        case 5:
                                tabLabel = getString(R.string.giornata6);
                                setNumGiornata("6");                   
                                break;
                        case 6:
                                tabLabel = getString(R.string.giornata7);
                                setNumGiornata("7");
                                break;
                        case 7:
                                tabLabel = getString(R.string.giornata8);
                                setNumGiornata("8");
                                break;
                        case 8:
                                tabLabel = getString(R.string.giornata9);
                                setNumGiornata("9");
                                break;
                        case 9:
                                tabLabel = getString(R.string.giornata10);
                                setNumGiornata("10");
                                break;
                        case 10:
                                tabLabel = getString(R.string.giornata11);
                                setNumGiornata("11");
                                break;
                        case 11:
                                tabLabel = getString(R.string.giornata12);
                                setNumGiornata("12");
                                break;
                        case 12:
                                tabLabel = getString(R.string.giornata13);
                                setNumGiornata("13");
                                break;
                        case 13:
                                tabLabel = getString(R.string.giornata14);
                                setNumGiornata("14");
                                break;
                        case 14:
                                tabLabel = getString(R.string.giornata15);
                                setNumGiornata("15");
                                break;
                        case 15:
                                tabLabel = getString(R.string.giornata16);
                                setNumGiornata("16");
                                break;
                        case 16:
                                tabLabel = getString(R.string.giornata17);
                                setNumGiornata("17");
                                break;
                        case 17:
                                tabLabel = getString(R.string.giornata18);
                                setNumGiornata("18");
                                break;
                        case 18:
                                tabLabel = getString(R.string.giornata19);
                                setNumGiornata("19");
                                break;
                        case 19:
                                tabLabel = getString(R.string.giornata20);
                                setNumGiornata("20");
                                break;
                        case 20:
                                tabLabel = getString(R.string.giornata21);
                                setNumGiornata("21");
                                break;
                        case 21:
                                tabLabel = getString(R.string.giornata22);
                                setNumGiornata("22");
                                break;
                        case 22:
                                tabLabel = getString(R.string.giornata23);
                                setNumGiornata("23");
                                break;
                        case 23:
                                tabLabel = getString(R.string.giornata24);
                                setNumGiornata("24");
                                break;
                        case 24:
                                tabLabel = getString(R.string.giornata25);
                                setNumGiornata("25");
                                break;
                        case 25:
                                tabLabel = getString(R.string.giornata26);
                                setNumGiornata("26");
                                break;
                        case 26:
                                tabLabel = getString(R.string.giornata27);
                                setNumGiornata("27");
                                break;
                        case 27:
                                tabLabel = getString(R.string.giornata28);
                                setNumGiornata("28");
                                break;
                        case 28:
                                tabLabel = getString(R.string.giornata29);
                                setNumGiornata("29");
                                break;
                        case 29:
                                tabLabel = getString(R.string.giornata30);
                                setNumGiornata("30");
                                break;
                        case 30:
                                tabLabel = getString(R.string.giornata31);
                                setNumGiornata("31");
                                break;
                        case 31:;
                                tabLabel = getString(R.string.giornata32);
                                setNumGiornata("32");
                                break;
                        case 32:
                                tabLabel = getString(R.string.giornata33);
                                setNumGiornata("33");
                                break;
                        case 33:
                                tabLabel = getString(R.string.giornata34);
                                setNumGiornata("34");
                                break;
                        case 34:
                                tabLabel = getString(R.string.giornata35);
                                setNumGiornata("35");
                                break;
                        case 35:
                                tabLabel = getString(R.string.giornata36);
                                setNumGiornata("36");
                                break;
                        case 36:
                                tabLabel = getString(R.string.giornata37);
                                setNumGiornata("37");
                                break;
                        case 37:
                                tabLabel = getString(R.string.giornata38);
                                setNumGiornata("38");
                                break;
                        default:
                                Toast.makeText(SerieA_Activity.this, "Errore nell'individuare la giornata", Toast.LENGTH_SHORT).show();
                                finish();
                    }
                    return tabLabel;
            }
       
        public void startSubActivity() {
                Intent intent;
                String pkg=getPackageName();
                //per rendere univoci i nomi delle chiavi passate
                //è consigliato (la doc dice 'must') aggiungere il nome del package davanti al nome del parametro passato
                intent = new Intent(getBaseContext(), VisualizzaSquadra_Activity.class);
                intent.putExtra(pkg + ".indicazione_della_squadra", "Catania");      //inseriamo i dati nell'intent
                startActivity(intent);
            }
       
        public void startSubActivityLogin() {
                Intent intent;
                intent = new Intent(getBaseContext(), LoginActivity.class);
                startActivity(intent);
            }
    }

    public static class TabFragment extends Fragment {
        public static final String ARG_OBJECT = "object";
       
        private static TextView mGiornataStatusMessageView;
        private static View mGiornataFormView;
        private static View mGiornataStatusView;
        private static GetGiornataTask mAuthTask = null;
       
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                Bundle args = getArguments();
                int tabLayout = R.layout.tab_serie_a;
                        //----------------------------------------provare a chiamare la query da qua-------------------
                mGiornataFormView = getActivity().findViewById(R.id.giornata_a_form);
                mGiornataStatusView = getActivity().findViewById(R.id.download_giornata_seriea_status);
                        mGiornataStatusMessageView = (TextView) getActivity().findViewById(R.id.download_giornata_status_message);
                       
                        mGiornataStatusMessageView.setText(R.string.recupero_progress_signing_in);
//                      getActivity().showProgress(true);
                        mAuthTask = new GetGiornataTask();
                        mAuthTask.execute((Void) null);
                //---------------------------------------------------------------------------------------------
                View rootView = inflater.inflate(tabLayout, container, false);
                return rootView;
            }
       
//      --------------- PARTE SULLA COMUNICAZIONE ASINCRONA     ------------------------------------------------------------------------------
       
        // -----------------------------------------------------------------------------------------------------------------------
        /**
         * Mostra la progress UI e nasconde il form di giornata. (dagli esempi nelle API)
         */

        @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
        private void showProgress(final boolean show) {
                // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
                // for very easy animations. If available, use these APIs to fade-in
                // the progress spinner.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
                        int shortAnimTime = getResources().getInteger(
                                        android.R.integer.config_shortAnimTime);

                        mGiornataStatusView.setVisibility(View.VISIBLE);
                        mGiornataStatusView.animate().setDuration(shortAnimTime)
                                        .alpha(show ? 1 : 0)
                                        .setListener(new AnimatorListenerAdapter() {
                                                @Override
                                                public void onAnimationEnd(Animator animation) {
                                                        mGiornataStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
                                                }
                                        });

                        mGiornataFormView.setVisibility(View.VISIBLE);
                        mGiornataFormView.animate().setDuration(shortAnimTime)
                                        .alpha(show ? 0 : 1)
                                        .setListener(new AnimatorListenerAdapter() {
                                                @Override
                                                public void onAnimationEnd(Animator animation) {
                                                        mGiornataFormView.setVisibility(show ? View.GONE : View.VISIBLE);
                                                }
                                        });
                }
                else {
                        // The ViewPropertyAnimator APIs are not available, so simply show
                        // and hide the relevant UI components.
                        mGiornataStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
                        mGiornataFormView.setVisibility(show ? View.GONE : View.VISIBLE);
                }
        }
       
        /**
         * Rappresenta un recupero asincrono della classifica
         */

        public class GetGiornataTask extends AsyncTask<Void, Void, ArrayList<Partita>> {
                @Override
                protected ArrayList<Partita> doInBackground(Void... params) {
                //      String URL = "http://192.168.1.65:8080/ApplicazioneCalcioItaliaServer/RestfulServlet";
                        String URL = AppCalcioClientActivityApertura.getIndirizzoIpServlet();
                        HttpClient httpclient = null;
                        HttpResponse response = null;
                        String azione = "download_risultati";
                        String url = URL + "?azione=" + azione + "&serie=A" + "&giornata=" + SerieA_Activity.getNumGiornata();
                        InputStream is = null;
                        ArrayList<Partita> listItems = null;
                        String result = "";
//                      String rispostaDoInBackground = null;
                       
                        //http post
                try{
                        httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost(url);
                        response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                }catch(Exception e){
                        System.out.println("Error in http connection "+ e.toString());
                }
              //converte risposta (response) in stringa
                try{
                                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8);                
                        StringBuilder sb = new StringBuilder();
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                        }
                        is.close();
                        result = sb.toString();
                }
                catch(Exception e){
                        System.out.println( "Error converting result: " + e.toString());
                }
               
                listItems = new ArrayList<Partita>();
                JSONArray ja;
                        try {
                                ja = new JSONArray(result.toString());
                                for (int i = 0; i < ja.length(); i++) {
                        JSONObject jo = (JSONObject) ja.get(i);
                        Partita record = new Partita();
                        record.setGiornata(jo.getString("giornata"));
                        record.setData(jo.getString("data"));
                        record.setSquadraCasa(jo.getString("casa"));
                        record.setRisultato(jo.getString("risultato"));
                        record.setSquadraFuoriCasa(jo.getString("ospiti"));
                        listItems.add(record);
                    }
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
               
                System.out.println("Fine recupero giornata " + SerieA_Activity.giornata);
               
                return listItems;
                }

                @Override
                protected void onPostExecute(final ArrayList<Partita> list) {
                        mAuthTask = null;
//                      showProgress(false);
                        TableLayout giornata = null;
                        if (list != null){      // successo
                                //      Prendo il riferimento della tabella che costituisce il corpo della classifica
                                //      riempiendolo con tante righe quante le squadre della serie scelta
                                giornata = (TableLayout) getActivity().findViewById(R.id.tabella_a_giornata);
               
                                //      aggiungo le righe alla tabella dei risultati
                                String rigaTemp = "R.id.serie_a_riga_", dataTemp = "R.id.tv_data_", casaTemp = "R.id.tv_squadra_casa_";
                                String risultatoTemp = "R.id.tv_risultato_", ospitiTemp = "R.id.tv_squadra_ospite_";
                                for(int i=0; i< list.size(); i++){
                                        rigaTemp += Integer.toString(i);
                                dataTemp += Integer.toString(i);
                                casaTemp += Integer.toString(i);
                                risultatoTemp += Integer.toString(i);
                                ospitiTemp += Integer.toString(i);
                        System.out.println("Valori R.id = " + rigaTemp + ", " + dataTemp + ", " + casaTemp + ", " + risultatoTemp + ", " + ospitiTemp);
                                TableRow nuovaRiga = (TableRow) getActivity().findViewById(Integer.parseInt(rigaTemp));
                                        TextView dataGara = (TextView) getActivity().findViewById(Integer.parseInt(dataTemp));
                                        dataGara.setText(list.get(i).getData());
                                        TextView casaGara = (TextView) getActivity().findViewById(Integer.parseInt(casaTemp));
                                        casaGara.setText(list.get(i).getSquadraCasa());
                                        TextView risultatoGara = (TextView) getActivity().findViewById(Integer.parseInt(risultatoTemp));
                                        risultatoGara.setText(list.get(i).getRisultato());
                                        TextView ospitiGara = (TextView) getActivity().findViewById(Integer.parseInt(ospitiTemp));
                                        ospitiGara.setText(list.get(i).getSquadraFuoriCasa());
                                        giornata.addView(nuovaRiga);
                                }
                               
                        }
                        else                            // scaricamento della classifica fallito
                                Toast.makeText(getActivity(), "Errore in recupero", Toast.LENGTH_LONG).show();
                }
        }
       
    }
   
 // ---------------- PARTE SUL MENU' DOVE SI CHIAMA LA CLASSIFICA       -------------------------------------------------------------------
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
        /*      getMenuInflater().inflate(R.menu.serie_a_, menu);       <-- non serve più con la libreia Sherlock e si sostituisce con quella sotto    */             
                getSupportMenuInflater().inflate(R.menu.serie_a_, menu);
                return true;
        }

        @Override
     public boolean onOptionsItemSelected(MenuItem item) {
                switch(item.getItemId()) {
                case R.id.classifica_serie_a:
                        startSubActivity(SERIEA);
                        return true;
                default:
                        finish();
                        return super.onOptionsItemSelected(item);      
                }      
     }
       
        public void startSubActivity(int serie) {
                Intent intent;
                switch(serie){
                        case SERIEA:
                                intent = new Intent(this, ActivityClassifica.class);
                       
                        String pkg=getPackageName();
                        //per rendere univoci i nomi delle chiavi passate
                        //è consigliato (la doc dice 'must') aggiungere il nome del package davanti al nome del parametro passato
                        intent.putExtra(pkg + ".indicazione_della_serie", SERIEA);      //inseriamo i dati nell'intent
                                //avvio la classifica per la SERIE A
                                startActivity(intent);
                        break;
                /*      case 99:
                                intent = new Intent(getBaseContext(), VisualizzaSquadra_Activity.class);
                                startActivity(intent);
                        break;
                */
      default:
                                Toast.makeText(this, "Errore id in SerieA_Activity", Toast.LENGTH_LONG).show();
                }
        }
   

}

il logcat restituito è:
Codice (Java): [Seleziona]
02-04 21:09:43.894: E/AndroidRuntime(2777): FATAL EXCEPTION: main
02-04 21:09:43.894: E/AndroidRuntime(2777): Process: it.appcalcioitalia.applicazioneclient, PID: 2777
02-04 21:09:43.894: E/AndroidRuntime(2777): java.lang.NullPointerException
02-04 21:09:43.894: E/AndroidRuntime(2777):     at it.appcalcioitalia.applicazioneclient.SerieA_Activity$TabFragment.onCreateView(SerieA_Activity.java:305)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.View.measure(View.java:16458)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.View.measure(View.java:16458)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.View.measure(View.java:16458)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2289)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.View.measure(View.java:16458)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1914)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1111)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1293)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.Choreographer.doFrame(Choreographer.java:532)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.os.Handler.handleCallback(Handler.java:733)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.os.Looper.loop(Looper.java:137)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at android.app.ActivityThread.main(ActivityThread.java:4998)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at java.lang.reflect.Method.invokeNative(Native Method)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at java.lang.reflect.Method.invoke(Method.java:515)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-04 21:09:43.894: E/AndroidRuntime(2777):     at dalvik.system.NativeStart.main(Native Method)

cosa può essere?

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #11 il: 05 Febbraio 2014, 11:10:34 CET »
0
Un consiglo:
Nel metodo "onAttach" del Fragment salvati l'activity in una variabile chiamata "mActivity" in modo tale da usarla al posto di getActivity() (potrebbe ritornare null in alcuni casi)

Parlando invece della soluzione del problema, sembra che la text view con id "download_giornata_status_message" non sia nell'xml dell'activity. Se sta nel fragment dovresti mettere prima la riga:
Codice (Java): [Seleziona]
 View rootView = inflater.inflate(tabLayout, container, false);e poi prelevare la textview in questo modo:
Codice (Java): [Seleziona]
mGiornataStatusMessageView = (TextView) rootView.findViewById(R.id.download_giornata_status_message);chiamandola sulla rootView e non sull'activity.
Prova così

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #12 il: 05 Febbraio 2014, 11:19:34 CET »
0
Citazione
Nel metodo "onAttach" del Fragment salvati l'activity in una variabile chiamata "mActivity" in modo tale da usarla al posto di getActivity() (potrebbe ritornare null in alcuni casi)

intendi il metodo onCreateView()?
questa variabile è di tipo Activity immagino, non ho mai usato una Activity come variabile  :-)

ho capito, è un metodo proprio di fragment  :-)

Citazione
Parlando invece della soluzione del problema, sembra che la text view con id "download_giornata_status_message" non sia nell'xml dell'activity. Se sta nel fragment dovresti mettere prima la riga:
Codice: [Seleziona]
View rootView = inflater.inflate(tabLayout, container, false);
e poi prelevare la textview in questo modo:
Codice: [Seleziona]
mGiornataStatusMessageView = (TextView) rootView.findViewById(R.id.download_giornata_status_message);
in effetti non si trova nel layout dell'activity ma su quello della tab
« Ultima modifica: 05 Febbraio 2014, 11:36:45 CET da aledpa »

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Chiamare un web service da un fragment
« Risposta #13 il: 05 Febbraio 2014, 11:43:12 CET »
0
Devi sovrascrivere il metodo onAttach del fragment. Questo metodo ha come parametro l'activity che ha creato il fragment e devi salvarla in mActivity. Viene chiamato prima di onCreateView e quindi puoi usare la variabile mActivity istanziata.

Inviato dal mio Nexus 5 utilizzando Tapatalk

Offline aledpa

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
Re:Chiamare un web service da un fragment
« Risposta #14 il: 05 Febbraio 2014, 16:15:53 CET »
0
sono riuscito a fare dei passi in avanti  :-)

adesso il codice è questo:
Codice (Java): [Seleziona]
public class SerieA_Activity extends SherlockFragmentActivity {
       
        CollectionPagerAdapter mCollectionPagerAdapter;
    ViewPager mViewPager;
    private static String giornata = "0";
   
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_serie_a);
    // Crea un adattatore che, quando richiesto, tornerà un fragment che rappresenta un oggetto della collezione.
       
    // ViewPager e i suoi adapter utilizzano support library fragment, quindi dobbiamo usare getSupportFragmentManager.
        mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager());
    // Imposto la action bar.
        final ActionBar actionBar = getSupportActionBar();
    // Specifico che il tasto in alto a sinistra è cliccabile,
    // toccando il pulsante l'utente salirà di un gradino nella gerarchia dell'applicazione.
        actionBar.setDisplayHomeAsUpEnabled(true);
    // Imposto la ViewPager, attaccandogli gli adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mCollectionPagerAdapter);
    }
   
    protected static String getNumGiornata(){
        return giornata;
    }
   
    private static void setNumGiornata(String g){
        giornata = g;
    }
   
    public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
        final int NUM_ITEMS = 38; // numbero di tabs --> una per giornata, la serie A ne ha 38
       
        public CollectionPagerAdapter(FragmentManager fm) {
                super(fm);
        }
       
        @Override
        public Fragment getItem(int i) {
                Fragment fragment = new TabFragment();
                Bundle args = new Bundle();
                args.putInt(TabFragment.ARG_OBJECT, i);
                fragment.setArguments(args);
                return fragment;
        }

        @Override
        public int getCount() {
                return NUM_ITEMS;
        }
       
        @Override
        public CharSequence getPageTitle(int position) {
                String tabLabel = null;
                // position contiene il numero del tab attivo (ovvero la giornata da visualizzare)
                // parte da 0, quindi per un totale di giornate - 1
                switch (position) {
                        case 0:
                                tabLabel = getString(R.string.giornata1);
                                break;
                        case 1:
                                tabLabel = getString(R.string.giornata2);
                                break;
                        case 2:
                                tabLabel = getString(R.string.giornata3);
                                break;
                        case 3:
                                tabLabel = getString(R.string.giornata4);
                                break;
                        case 4:
                                tabLabel = getString(R.string.giornata5);
                                break;
                        case 5:
                                tabLabel = getString(R.string.giornata6);
                                break;
                        case 6:
                                tabLabel = getString(R.string.giornata7);
                                break;
                        case 7:
                                tabLabel = getString(R.string.giornata8);
                                break;
                        case 8:
                                tabLabel = getString(R.string.giornata9);
                                break;
                        case 9:
                                tabLabel = getString(R.string.giornata10);
                                break;
                        case 10:
                                tabLabel = getString(R.string.giornata11);
                                break;
                        case 11:
                                tabLabel = getString(R.string.giornata12);
                                break;
                        case 12:
                                tabLabel = getString(R.string.giornata13);
                                break;
                        case 13:
                                tabLabel = getString(R.string.giornata14);
                                break;
                        case 14:
                                tabLabel = getString(R.string.giornata15);
                                break;
                        case 15:
                                tabLabel = getString(R.string.giornata16);
                                break;
                        case 16:
                                tabLabel = getString(R.string.giornata17);
                                break;
                        case 17:
                                tabLabel = getString(R.string.giornata18);
                                break;
                        case 18:
                                tabLabel = getString(R.string.giornata19);
                                break;
                        case 19:
                                tabLabel = getString(R.string.giornata20);
                                break;
                        case 20:
                                tabLabel = getString(R.string.giornata21);
                                break;
                        case 21:
                                tabLabel = getString(R.string.giornata22);
                                break;
                        case 22:
                                tabLabel = getString(R.string.giornata23);
                                break;
                        case 23:
                                tabLabel = getString(R.string.giornata24);
                                break;
                        case 24:
                                tabLabel = getString(R.string.giornata25);
                                break;
                        case 25:
                                tabLabel = getString(R.string.giornata26);
                                break;
                        case 26:
                                tabLabel = getString(R.string.giornata27);
                                break;
                        case 27:
                                tabLabel = getString(R.string.giornata28);
                                break;
                        case 28:
                                tabLabel = getString(R.string.giornata29);
                                break;
                        case 29:
                                tabLabel = getString(R.string.giornata30);
                                break;
                        case 30:
                                tabLabel = getString(R.string.giornata31);
                                break;
                        case 31:;
                                tabLabel = getString(R.string.giornata32);
                                break;
                        case 32:
                                tabLabel = getString(R.string.giornata33);
                                break;
                        case 33:
                                tabLabel = getString(R.string.giornata34);
                                break;
                        case 34:
                                tabLabel = getString(R.string.giornata35);
                                break;
                        case 35:
                                tabLabel = getString(R.string.giornata36);
                                break;
                        case 36:
                                tabLabel = getString(R.string.giornata37);
                                break;
                        case 37:
                                tabLabel = getString(R.string.giornata38);
                                break;
                        default:
                                Toast.makeText(SerieA_Activity.this, "Errore nell'individuare la giornata", Toast.LENGTH_SHORT).show();
                                finish();
                    }
                    return tabLabel;
            }
       
        public void startSubActivity() {
                Intent intent;
                String pkg=getPackageName();
                //per rendere univoci i nomi delle chiavi passate
                //è consigliato (la doc dice 'must') aggiungere il nome del package davanti al nome del parametro passato
                intent = new Intent(getBaseContext(), VisualizzaSquadra_Activity.class);
                intent.putExtra(pkg + ".indicazione_della_squadra", "Catania");      //inseriamo i dati nell'intent
                startActivity(intent);
            }
       
        public void startSubActivityLogin() {
                Intent intent;
                intent = new Intent(getBaseContext(), LoginActivity.class);
                startActivity(intent);
            }
    }

    public static class TabFragment extends Fragment {
        public static final String ARG_OBJECT = "object";
       
        private static TextView mGiornataStatusMessageView;
        private static View mGiornataFormView;
        private static View mGiornataStatusView;
        private static GetGiornataTask mAuthTask = null;
        private static Activity mActivity;
       
        @Override
        public void onAttach (Activity activity){
                super.onAttach(activity);
                mActivity = activity;
        }
       
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                Bundle args = getArguments();
                int position = args.getInt(ARG_OBJECT);
                int tabLayout = R.layout.tab_serie_a;
               
                setNumGiornata(Integer.toString(position));
               
                View rootView = inflater.inflate(tabLayout, container, false);
                        //----------------------------------------provare a chiamare la query da qua-------------------
                mGiornataFormView = rootView.findViewById(R.id.giornata_a_form);
                mGiornataStatusView = rootView.findViewById(R.id.download_giornata_seriea_status);
                        mGiornataStatusMessageView = (TextView) rootView.findViewById(R.id.download_giornata_status_message);
                       
                        mGiornataStatusMessageView.setText(R.string.recupero_progress_signing_in);
                        showProgress(true);
                        mAuthTask = new GetGiornataTask();
                        mAuthTask.execute((Void) null);
                //---------------------------------------------------------------------------------------------
                return rootView;
            }
       
//      --------------- PARTE SULLA COMUNICAZIONE ASINCRONA     ------------------------------------------------------------------------------
       
        // -----------------------------------------------------------------------------------------------------------------------
        /**
         * Mostra la progress UI e nasconde il form di giornata. (dagli esempi nelle API)
         */

        @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
        private void showProgress(final boolean show) {
                // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
                // for very easy animations. If available, use these APIs to fade-in
                // the progress spinner.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
                        int shortAnimTime = mActivity.getResources().getInteger(
                                        android.R.integer.config_shortAnimTime);

                        mGiornataStatusView.setVisibility(View.VISIBLE);
                        mGiornataStatusView.animate().setDuration(shortAnimTime)
                                        .alpha(show ? 1 : 0)
                                        .setListener(new AnimatorListenerAdapter() {
                                                @Override
                                                public void onAnimationEnd(Animator animation) {
                                                        mGiornataStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
                                                }
                                        });

                        mGiornataFormView.setVisibility(View.VISIBLE);
                        mGiornataFormView.animate().setDuration(shortAnimTime)
                                        .alpha(show ? 0 : 1)
                                        .setListener(new AnimatorListenerAdapter() {
                                                @Override
                                                public void onAnimationEnd(Animator animation) {
                                                        mGiornataFormView.setVisibility(show ? View.GONE : View.VISIBLE);
                                                }
                                        });
                }
                else {
                        // The ViewPropertyAnimator APIs are not available, so simply show
                        // and hide the relevant UI components.
                        mGiornataStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
                        mGiornataFormView.setVisibility(show ? View.GONE : View.VISIBLE);
                }
        }
       
        /**
         * Rappresenta un recupero asincrono della classifica
         */

        public class GetGiornataTask extends AsyncTask<Void, Void, ArrayList<Partita>> {
                @Override
                protected ArrayList<Partita> doInBackground(Void... params) {
                        String URL = AppCalcioClientActivityApertura.getIndirizzoIpServlet();
                        HttpClient httpclient = null;
                        HttpResponse response = null;
                        String azione = "download_risultati";
                        String url = URL + "?azione=" + azione + "&serie=A" + "&giornata=" + SerieA_Activity.getNumGiornata();
                        InputStream is = null;
                        ArrayList<Partita> listItems = null;
                        String result = "";

                        //http post
                try{
                        httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost(url);
                        response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                }catch(Exception e){
                        System.out.println("Error in http connection "+ e.toString());
                }
              //converte risposta (response) in stringa
                try{
                                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8);                
                        StringBuilder sb = new StringBuilder();
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                        }
                        is.close();
                        result = sb.toString();
                }
                catch(Exception e){
                        System.out.println( "Error converting result: " + e.toString());
                }
               
                listItems = new ArrayList<Partita>();
                JSONArray ja;
                        try {
                                ja = new JSONArray(result.toString());
                                for (int i = 0; i < ja.length(); i++) {
                        JSONObject jo = (JSONObject) ja.get(i);
                        Partita record = new Partita();
                        record.setGiornata(jo.getString("giornata"));
                        record.setData(jo.getString("data"));
                        record.setSquadraCasa(jo.getString("squadraCasa"));
                        record.setRisultato(jo.getString("risultato"));
                        record.setSquadraFuoriCasa(jo.getString("squadraFuoriCasa"));
                        listItems.add(record);
                    }
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
               
                System.out.println("Fine recupero giornata " + SerieA_Activity.giornata);
               
                return listItems;
                }

                @Override
                protected void onPostExecute(final ArrayList<Partita> list) {
                        mAuthTask = null;
                        showProgress(false);
                        if (list != null){      // successo
                                //      aggiungo le righe alla tabella dei risultati
                                for(int i=0; i< list.size(); i++){
                                        riempiCampiGiornata(i, list.get(i).getData(), list.get(i).getSquadraCasa(), list.get(i).getRisultato(), list.get(i).getSquadraFuoriCasa());
                                }
                               
                        }
                        else                            // scaricamento della classifica fallito
                                Toast.makeText(getActivity(), "Errore in recupero", Toast.LENGTH_LONG).show();
                }
        }
       
        private void riempiCampiGiornata(int numRiga, String data, String casa, String risultato, String ospiti){
                TableRow nuovaRiga = null;
                TextView dataGara = null, casaGara = null, risultatoGara = null, ospitiGara = null;
                       
                switch(numRiga){
                        case 0:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_1);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_1);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_1);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_1);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_1);
                        break;
                        case 1:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_2);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_2);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_2);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_2);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_2);                              
                        break;
                        case 2:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_3);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_3);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_3);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_3);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_3);
                        break;
                        case 3:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_4);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_4);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_4);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_4);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_4);                              
                        break;
                        case 4:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_5);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_5);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_5);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_5);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_5);
                        break;
                        case 5:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_6);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_6);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_6);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_6);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_6);                              
                        break;
                        case 6:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_7);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_7);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_7);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_7);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_7);
                        break;
                        case 7:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_8);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_8);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_8);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_8);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_8);                              
                        break;
                        case 8:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_9);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_9);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_9);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_9);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_9);
                        break;
                        case 9:
                                nuovaRiga = (TableRow) mActivity.findViewById(R.id.serie_a_riga_10);
                                dataGara = (TextView) mActivity.findViewById(R.id.tv_data_10);
                                casaGara = (TextView) mActivity.findViewById(R.id.tv_squadra_casa_10);
                                risultatoGara = (TextView) mActivity.findViewById(R.id.tv_risultato_10);
                                ospitiGara = (TextView) mActivity.findViewById(R.id.tv_squadra_ospite_10);                             
                        break;
                }
                dataGara.setText(data);
                        casaGara.setText(casa);
                        risultatoGara.setText(risultato);
                        ospitiGara.setText(ospiti);
                        System.out.println(data + " " + casa + " " + risultato + " " + ospiti);
        }
    }
   
}

quando avvio l'activity mi si presenta la schermata in figura "screen";

sul logcat mi compare Fine recupero giornata 1 come ho messo con il System.out.println  (due volte,non capisco il perché) e tutti i dati relativi alla giornata 1 (mi visualizza i risultati della serie a (penso si era capito già  :-) ) ma questi non vengono messi sulle righe della tabella (che non appare proprio, come se non venisse mai chiamato il showProgress(false), se mi muovo a destra ottengo la "screen2" (prova e le xx sono messe sul layout e dovrebbero venire sovrascritte) mentre se vado a sinistra ottengo la visualizzazione dei dati della giornata successiva ma nel tab di quella precedente; mi spiego meglio, se sono nel tab giornata 3 e vado nel tab giornata 2 mi vengono visualizzati i dati della giornata 4!

mi sembra troppo strana questa cosa