Autore Topic: ListView visualizzazione del database...  (Letto 576 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
ListView visualizzazione del database...
« il: 25 Agosto 2013, 13:54:23 CEST »
0
ciao a tutti!!!

stò avendo grande difficoltà nel visualizzare tutto quello che inserisco nel database!!!

quando entro nella pagina di visualizzazione del db mi visualizza questo:

com.example.databasedemo2@3423543655654

come mai?????

vi porgo il mio codice...

nel DatabaseHandler per visualizzare la listView scrivo questo:

Codice (Java): [Seleziona]
public List<Contact> getAllContacts() {
       List<Contact> contactList = new ArrayList<Contact>();
       String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(selectQuery, null);
       if (cursor.moveToFirst()) {
           do {
               Contact contact = new Contact();
               //contact.setID(Integer.parseInt(cursor.getString(0)));
               contact.setNome(cursor.getString(1));
               contactList.add(contact);
           } while (cursor.moveToNext());
       }

       return contactList;
   }

nell'activity per visualizzare la lista del database scrivo questo:

Codice (Java): [Seleziona]
public class ListaDatabase extends Activity {

        ListView listView;
    DatabaseHandler db;
    Cursor cursor;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.lista_database);
               
                db = new DatabaseHandler(this);
                List<Contact> list = db.getAllContacts();  
                ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, list);
                listView = (ListView) findViewById(R.id.listView1);  
                listView.setAdapter(adapter);  
        }
       
        @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
        db.close();
    }
}

dove sbaglio??? aiutatemi!!!! :'(
tutti possiamo programmare...basta volerlo!!!

Offline matttt

Re:ListView visualizzazione del database...
« Risposta #1 il: 25 Agosto 2013, 22:58:45 CEST »
0
Allora:
- funzione getAllContacts() ... ti scrivo qualche nota mia, poi valuta tu:
Codice (Java): [Seleziona]
List<Contact> contactList = new ArrayList<Contact>();io metterei:
Codice (Java): [Seleziona]
ArrayList<Contact> contactList = new ArrayList<Contact>();il cast a List<Contact> lo fa in automatico il return alla fine.
- il ciclo per il fetch dei risultati della query puoi anche farlo soltanto:
Codice (Java): [Seleziona]
while( cursor.moveToNext() )
{
// ...
}
- riguardo al tuo problema specifico invece credo che la questione sia nelle righe:
Codice (Java): [Seleziona]
List<Contact> list = db.getAllContacts();
ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, list);
In sostanza tu stai dando in pasto all'adapter con layout simple_list_item_1 (che a memoria dovrebbe essere un semplice TextView con id text1) una lista di Contact. Lui si aspetta una lista di stringhe da sparare dentro il TextView text1. Motivo per cui invoca il .toString() che però non è presente nella tua classe e di conseguenza utilizza quello automatico (credo derivato da Object, ma potrei sbagliare di grosso qui).
Cosa puoi fare... forse se fai l'override di toString nella classe Contact hai risolto tutto.
In alternativa... dovresti farti una classe adapter nella quale fare l'override di getView e disegnare tu gli items della ListView.
Le mie apps su Google Play Store:

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:ListView visualizzazione del database...
« Risposta #2 il: 26 Agosto 2013, 09:42:24 CEST »
0
...ok!!! grazie dell'aiuto!!!
tutti possiamo programmare...basta volerlo!!!

Offline matttt

Re:ListView visualizzazione del database...
« Risposta #3 il: 26 Agosto 2013, 13:16:02 CEST »
0
...ok!!! grazie dell'aiuto!!!
Hehe, se ti risolve il problema un bel Thanks non mi dispiace :)

Poi fammi sapere se funziona l'override di toString()
Le mie apps su Google Play Store:

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:ListView visualizzazione del database...
« Risposta #4 il: 26 Agosto 2013, 13:36:10 CEST »
0
ciao matt...l'ho risolto in questo modo:

praticamente ho creato un nuovo activity:

il CustomCursorAdapter cioè:

Codice (Java): [Seleziona]
public class CustomCursorAdapter extends CursorAdapter {
 
    public CustomCursorAdapter(Context context, Cursor c) {
        super(context, c);
    }
 
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        // when the view will be created for first time,
        // we need to tell the adapters, how each item will look
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View retView = inflater.inflate(R.layout.single_row_item, parent, false);
 
        return retView;
    }
 
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // here we are setting our data
        // that means, take the data from the cursor and put it in views
 
        TextView nomeRow = (TextView) view.findViewById(R.id.nome_row);
        nomeRow.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1))));

    }
}

dopo di che all'activity della lista ho scritto questo:

Codice (Java): [Seleziona]
public class ListaDB extends Activity {
     
    private CustomCursorAdapter customAdapter;
    private DatabaseHelper databaseHelper;
    private static final int ENTER_DATA_REQUEST_CODE = 1;
    private ListView listView;
    Button btn_esci;
    private static final String TAG = MainActivity.class.getSimpleName();
 
    /**
     * Called when the activity is first created.
     */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lista_db);
 
        databaseHelper = new DatabaseHelper(this);
 
        btn_esci = (Button)findViewById(R.id.btn_esci);
        btn_esci.setOnClickListener(new View.OnClickListener() {                       
                        @Override
                        public void onClick(View arg0) {
                                // TODO Auto-generated method stub
                                Intent intent = new Intent();
                        intent.setClass(getApplicationContext(), MainActivity.class);
                        startActivity(intent);
                        }
                });
       
        listView = (ListView) findViewById(R.id.list_data);
        listView.setOnItemClickListener(new OnItemClickListener() {
 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.d(TAG, "clicked on item: " + position);
                TextView nome = (TextView) view.findViewById(R.id.nome_row);
                String label2 = nome.getText().toString();
               
                String label = listView.getItemAtPosition(position).toString();
                Toast.makeText(getApplicationContext(), "Customer Name : " + label2, Toast.LENGTH_LONG).show();
            }
        });
 
 
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                customAdapter = new CustomCursorAdapter(ListaDB.this, databaseHelper.getAllData());
                listView.setAdapter(customAdapter);
            }
        });
    }

   
}

in questo modo vado a personalizzare la listView.......

cmq scusa se non ti ho ringraziato!!!!

grazie mille!!!!!

grazie al tuo suggerimento ho raggiunto il mio scopo!!!

tutti possiamo programmare...basta volerlo!!!

Offline matttt

Re:ListView visualizzazione del database...
« Risposta #5 il: 26 Agosto 2013, 13:41:10 CEST »
0
Un CursorAdapter ... mi sembra ottimo.
Devo provare anche io con una mia app.
Le mie apps su Google Play Store: