[RISOLTO]Array da Fragment a Classe

di il
14 risposte

[RISOLTO]Array da Fragment a Classe

Ho un Array popolato da database e vorrei passarlo ad una classe che estende una View, come posso fare?Grazie
Metodo nel Fragment:

public void checkOperatori(){
        SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
        String OPERATORI = "SELECT DISTINCT(nome) FROM Operatori";
        Cursor cur = db.rawQuery(OPERATORI, null);
        while (cur.moveToNext()) {
            String nome_op = cur.getString(0);
           
            array_operatori.add(nome_op);

            }
         cur.close();
         db.close();

    }
classe a cui voglio inviare l'Array:

public class MiaView extends View {
...
}

14 Risposte

  • Re: [RISOLTO]Array da Fragment a Classe

    In base ai principi del pattern MVC il fragment è un controller, dal quale dovresti poter comunicare direttamente con la view. Come fare? La view è un elemento grafico, di cui puoi ottenere un riferimento quando imposti il layout (a memoria ciò avviene nel metodo "onCreateView", controlla la documentazione per sicurezza)


    Sent from my iPhone using Tapatalk
  • Re: [RISOLTO]Array da Fragment a Classe

    Per fare una prova, cerco di passare le stringhe con il metodo set
    mWeekView.setData(nome_op, cognome_op);
    e nella view:
    
    private String nome_op, cognome_op;
        public void setData(String nome_op, String cognome_op)
        {
            this.nome_op = nome_op;
            this.cognome_op = cognome_op;
        }
        public String get_nome_op()
        {
            return nome_op;
        }
        public String get_cognome_op()
        {
            return cognome_op;
        }
    
    ottengo una eccezione della view che comunque ho inizializzato nell'oncreate del fragment.
    
    nell'oncreateview:
    [code]mWeekView = (WeekView) rootView.findViewById(R.id.weekView);
    public void checkOperatori(){
    SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
    String OPERATORI = "SELECT DISTINCT(nome), cognome FROM Operatori";
    Cursor cur = db.rawQuery(OPERATORI, null);
    while (cur.moveToNext()) {
    String nome_op = cur.getString(0);
    String cognome_op = cur.getString(1);
    mWeekView.setData(nome_op, cognome_op);

    }
    cur.close();
    db.close();

    }

    [/code]
  • Re: [RISOLTO]Array da Fragment a Classe

    Che eccezione ottieni?
  • Re: [RISOLTO]Array da Fragment a Classe

    Riepilogando:
    l'eccezione la controllo in seguito. Ora ho inserito il metodo direttamente nell'oncreate:
    
     SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String OPERATORI = "SELECT DISTINCT(nome), cognome FROM Operatori";
            Cursor cur = db.rawQuery(OPERATORI, null);
            while (cur.moveToNext()) {
                String nome_op = cur.getString(0);
                String cognome_op = cur.getString(1);
                mWeekView.setData(nome_op, cognome_op);
               
                }
             cur.close();
             db.close();
    
    
    all'interno della view imposto il metodo setData().
    Non ho nessuna eccezione in questo caso, ora però come verifico se effettivamente le stringhe sono passate?
    
    public class WeekView extends View {
    ...
    private String nome_op, cognome_op;
    
        public void setData(String nome_op, String cognome_op)
        {
            this.nome_op = nome_op;
            this.cognome_op = cognome_op;
        }
        public String get_nome_op()
        {
            return nome_op;
        }
        public String get_cognome_op()
        {
            return cognome_op;
        }
    ...
    }
    
  • Re: [RISOLTO]Array da Fragment a Classe

    Mettere la query nell'oncreate non è il massimo, per questioni di performance ed anche concettualmente. Il punto è: come ottieni il riferimento alla mWeekView? Il layout puoi impostarlo solo nella "onCreateView", non nell'" onCreate"
  • Re: [RISOLTO]Array da Fragment a Classe

    Sistemo le cose come si deve, il Fragment:
    
     private WeekView mWeekView;
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.elenco_p, container, false);
            setHasOptionsMenu(true);
    
      mWeekView = (WeekView) rootView.findViewById(R.id.weekView);
    }
    //metodo con le stringhe da passare, così però ottengo NPE della WeekView 
    public void checkOperatori(){
            SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String OPERATORI = "SELECT DISTINCT(nome), cognome FROM Operatori";
            Cursor cur = db.rawQuery(OPERATORI, null);
            while (cur.moveToNext()) {
                String nome_op = cur.getString(0);
                String cognome_op = cur.getString(1);
                mWeekView.setData(nome_op, cognome_op);
              
                }
             cur.close();
             db.close();
    
        }
    ...
    ...
    
    
    la View:
    
    public class WeekView extends View {
    public void setData(String nome_op, String cognome_op)
        {
            this.nome_op = nome_op;
            this.cognome_op = cognome_op;
        }
        public String get_nome_op()
        {
            return nome_op;
        }
        public String get_cognome_op()
        {
            return cognome_op;
        }
    ...
    ...
    ...
     }
    
  • Re: [RISOLTO]Array da Fragment a Classe

    Ok, ma in che punto del codice chiami "checkOperatori" ?
  • Re: [RISOLTO]Array da Fragment a Classe

    Sì, scusa nell'oncreateView dopo aver inizializzato il Db e la WeekView.
    il metodo restituisce correttamente i dati. È la view che da npe con il metodo setData.
  • Re: [RISOLTO]Array da Fragment a Classe

    Se il codice è come di allora il problema è che non riesce a trovare la WeekView nel layout, quindi ci deve essere qualche problema nel file xml. Per verificare se è cosi prova a fare un log (dovrebbe funzionare anche la System.out.println) della mWeekView dopo che hai fatto la findViewById. Se ottieni un nulla allora hai un problema nell'xml
  • Re: [RISOLTO]Array da Fragment a Classe

    Risolto il problema del NPE.

    Siccome nella tabella "Operatori" ci saranno diversi records, quando eseguo la Query, aggiungo i dati ad un ArrayList(inizializzato prima del'OncreateView()), che dovrò passare alla classe View.
    
    private ArrayList<String> array_operatori = new ArrayList<String>();
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.elenco_p, container, false);
    ...
    //qui vengono inizializzati il db e la WeekView
    ...
    checkOperatori();
     }
    
    public void checkOperatori(){
            SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String OPERATORI = "SELECT DISTINCT(nome), cognome FROM Operatori";
            Cursor cur = db.rawQuery(OPERATORI, null);
            while (cur.moveToNext()) {
                String nome_op = cur.getString(0);
                String cognome_op = cur.getString(1);
                //mWeekView.setData(nome_op, cognome_op);
                array_operatori.add(nome_op);
    
                }
             cur.close();
             db.close();
    
        }
    
    invece di passare le singole stringhe come passo l'array?
    Non ho trovato esempi di come passare un array ad una classe.....
  • Re: [RISOLTO]Array da Fragment a Classe

    evans ha scritto:


    risolto il problema del NPE ... aggiungo i dati ad un ArrayList(inizializzato prima del'OncreateView()), che dovrò passare alla classe View.
    Per questo chiedevo il LogCat, per trovare subito l'errore.


    Comunque se i dati li passi tramite un metodo dov'è il problema? Cambi la signature del metodo e sei a posto
  • Re: [RISOLTO]Array da Fragment a Classe

    Come?
  • Re: [RISOLTO]Array da Fragment a Classe

    Scusa attualmente passi i dati con un metodo "setData(String ..)" no? Allora puoi benissimo fare il metodo "setData(String[]
    ..)"


    Sent from my iPhone using Tapatalk
  • Re: [RISOLTO]Array da Fragment a Classe

Devi accedere o registrarti per scrivere nel forum
14 risposte