Autore Topic: asynctask connessione al database e visualizzazione  (Letto 599 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
asynctask connessione al database e visualizzazione
« il: 05 Maggio 2013, 15:00:29 CEST »
0
il mio problema è utilizzare un asynctask x connettermi al database e far visualizzare i dati in una listview vi posto il codice:
Codice (Java): [Seleziona]
package com.example.tesi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import com.mysql.jdbc.ResultSetMetaData;

public class lista extends Activity {
       
       
        private static final String url = "jdbc:mysql://10.0.2.2:3306/tesina";
    private static final String user = "root";
    private static final String pass = "";
    ListView listView;
    List<Sezione> list;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listac);
        new Connessione().execute();
        listView = (ListView)findViewById(R.id.lista);
        list = new LinkedList<Sezione>();
       
        OnItemClickListener clickListener = new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                int position, long id) {
               
                TextView idc = (TextView)view.findViewById(R.id.id);  
                String testo_id = idc.getText().toString();
                Intent studente = new Intent(getApplicationContext(), Studente.class);
                studente.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                studente.putExtra("id",testo_id);
                startActivity(studente);
                finish();
               
               
               
            }
        };
        listView.setOnItemClickListener(clickListener);

    }
   
    private class Connessione extends AsyncTask {
       
        @Override
        protected Object doInBackground(Object... arg0) {
   
        try {
                       
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, pass);
            String result = "Database connection success\n";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from classi");
           

            while(rs.next()) {
               
           
                 list.add(new Sezione("id:"+rs.getString(1),"sezione:"+rs.getString(2),"indirizzo:"+rs.getString(3)));
               
            }
            CustomAdapter adapter = new CustomAdapter(lista.this, R.layout.riga, list);
            listView.setAdapter(adapter);
           
           
         
        }
        catch(Exception e) {
            e.printStackTrace();
           
        }
        return null;
     }
}

}
Questo codice so che è sbagliato,  perche il doinbackground non utilizza l'interfaccia grafica però io lho inserita lo stesso!! COme posso gestire la visualizzazione della mia listview???

Offline two_socks

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus
  • Sistema operativo:
    Windows XP
Re:asynctask connessione al database e visualizzazione
« Risposta #1 il: 05 Maggio 2013, 15:33:30 CEST »
0
Non ne sono sicuro perchè sono ancora alquanto acerbo, comunque con l'AsyncTask per poter modificare dati nel layout devi usare onProgressUpdate().

Questo metodo ha la possibilità di aggiornare il layout e viene richiamato tramite publishProgress().
L'aggiornamento comunque avviene on-the-fly e quindi per ogni chiamata il metodo aggiorna il layout (cosa da tenere conto se stai caricando i dati dal db e vuoi visualizzare il tutto in una sola passata)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:asynctask connessione al database e visualizzazione
« Risposta #2 il: 05 Maggio 2013, 15:42:43 CEST »
0
Solo il thread UI può modificare la UI (guardacaso!). Nell'AsyncTask il doInBackground non é eseguito nel thread UI (ed é a questo che serve).
L'aggiornamento della lista va fatto a fine esecuzione, nel metodo onPostExecute.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:asynctask connessione al database e visualizzazione
« Risposta #3 il: 06 Maggio 2013, 13:02:39 CEST »
0
ottimo ho risolto tt, grazie mille!!