Autore Topic: GridView da mysql  (Letto 718 volte)

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
GridView da mysql
« il: 11 Settembre 2011, 18:24:35 CEST »
0
salve a tutti, sono nuovo del e sto cominciando lo studio di android per creare un piccola applicazione che deve connettersi a un db mysql.
lasciando perdere l'ottimizzazione del codice (poi lo metterò a posto) vorrei effettuare una semplice query e visualizzare i risultati.
come componente ho scelto GridView che mi sembrava adatta.
seguendo un tutorial ho prima creato un file php che crea un oggetto JSON.
e poi ho messto questa roba qua:
Codice: [Seleziona]
public class DBManagerActivity extends Activity {
        JSONArray jArray;
        String result = null;
        InputStream is = null;
        StringBuilder sb = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                try {
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://host/android.php");
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                } catch (Exception e) {
                        Log.e("log_tag", "Error in http connection" + e.toString());
                }
                try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                        sb = new StringBuilder();
                        sb.append(reader.readLine() + "\n");
                        String line = "0";
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                        }
                        is.close();
                        result = sb.toString();
                } catch (Exception e) {
                        Log.e("log_tag", "Error converting result " + e.toString());
                }
                try {
                        jArray = new JSONArray(result);
                        JSONObject json_data = null;
                        for (int i = 0; i < jArray.length(); i++) {
                                json_data = jArray.getJSONObject(i);
                                int id = json_data.getInt("id_movimento");
                                int entrata = json_data.getInt("entrata");
                        }
                } catch (JSONException e1) {
                        Toast.makeText(getBaseContext(), "No City Found", Toast.LENGTH_LONG).show();
                } catch (ParseException e1) {
                        e1.printStackTrace();
                }
               
                GridView gd = (GridView) findViewById(R.id.gridView1);
        }
}
ho già aggiunto la GV nel designer.
ora però mi sono bloccato.
come faccio a dirgli di visualizzare i dati nelle GV?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:GridView da mysql
« Risposta #1 il: 11 Settembre 2011, 19:23:18 CEST »
0
Devi costruire un adapter da passare alla GridView... prova a dare un occhio ai nostri tutorial a riguardo (si riferiscono a delle ListView ma gli adapter sono gli stessi).

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:GridView da mysql
« Risposta #2 il: 13 Settembre 2011, 15:02:44 CEST »
0
ciao!
intanto grazie per la risposta.
mi sono un pò documentato ma nn ho capito molto bene.
allora, prima di tutto ho rifatto la classe di connessione usando JDBC:
Codice: [Seleziona]
package com.mattepuffo.banca;

import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

public class DbManager {

        private static DbManager instance = null;
        // String di connessione
        private static Connection conn = null;

        private DbManager() {
        }

        public static DbManager getInstance() {
                return (instance == null) ? (instance = new DbManager()) : instance;
        }

        public Connection takeConnection() throws ClassNotFoundException,
                        SQLException, IOException {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://" + HOST + ":3306/"
                                + DB + "?user=" + USER + "&password=" + PWD);
                return conn;
        }

        public void select() throws ClassNotFoundException, SQLException,
                        IOException {
                ArrayList<Movimenti> list = new ArrayList<Movimenti>();
                conn = DbManager.getInstance().takeConnection();
                PreparedStatement cstmt = conn
                                .prepareStatement("SELECT * FROM movimenti");
                ResultSet rs = cstmt.executeQuery();
                while (rs.next()) {
                        list.add(new Movimenti(rs.getInt("id_movimento"), rs
                                        .getInt("entrata"), rs.getInt("uscita"), rs
                                        .getString("causale"), rs.getString("data")));
                }
                cstmt.close();
        }

        public void disconnect() throws SQLException {
                if (conn != null) {
                        conn.close();
                }
        }
}
questa la classe "bean" di Movimenti:
Codice: [Seleziona]
package com.mattepuffo.banca;

public class Movimenti {

        private int id;
        private int entrata;
        private int uscita;
        private String causale;
        private String data;

        public Movimenti(int id, int entrata, int uscita, String causale,
                        String data) {
                this.id = id;
                this.entrata = entrata;
                this.uscita = uscita;
                this.causale = causale;
                this.data = data;
        }

        public int getId() {
                return id;
        }

        public int getEntrata() {
                return entrata;
        }

        public int getUscita() {
                return uscita;
        }

        public String getCausale() {
                return causale;
        }

        public String getData() {
                return data;
        }
}
poi ho creato una classe che estende BaseAdapter.
Codice: [Seleziona]
package com.mattepuffo.banca;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class DbAdapter extends BaseAdapter{
       
        private Context context= null;
       
        public DbAdapter(Context context) {
                this.context = context;
        }

        public int getCount() {
                // TODO Auto-generated method stub
                return 0;
        }

        public Object getItem(int arg0) {
                // TODO Auto-generated method stub
                return null;
        }

        public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                return null;
        }
}
il problema è che nn ho ben capito adesso che dovrei farci.
mi pare di aver capito che in main.xml devo indicare questo come Adapter, giusto?
ma come faccio a passare i dati estratti dal db all'adapter??

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:GridView da mysql
« Risposta #3 il: 15 Settembre 2011, 20:33:06 CEST »
0
faccio un utlimo tentativo e poi abbandono perchè nn so più dove sbattere la testa.
nessuno ha qualche idea?
ho provato a seguire i tutorial ma gli esempi sono troppo diversi dal mio.
posso anche nn usare la classe Movimenti ed usare qualcos'altro per estrapolare i dati.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:GridView da mysql
« Risposta #4 il: 15 Settembre 2011, 23:44:34 CEST »
0
Sei sicuro che jdbc funzioni anche su Android? Idealmente dovresti realizzare un webservice che effettua la query e ti ritorna il risultato al client, io eviterei di far connettere direttamente il client al db.

Comunque una volta creato l'ArrayList con i dati che ti servono dovresti creare un ArrayAdapter come spiegato in questo tutorial:

[medio] ListView con layout personalizzato tramite un custom ArrayAdapter - Android Developers Italia