Autore Topic: Errore sul popolamento della list view  (Letto 953 volte)

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Errore sul popolamento della list view
« il: 07 Novembre 2011, 09:33:58 CET »
0
Mi scuso se il titolo del topic non un gran che  :-(
ciao a tutti, vorrei chiedere un piccolo aiuto. Ho un problema con il popolamento della mis listview, o meglio quando premo il pulsante vedi tabella, nella seconda activity mi dovrebbero apparire i dati del mio db. Cio accade se li inserisco in una semplice text view, ma quando cerco di popolare una listview con quei dati, va in errore. Ho fatto una googlata sul quell'errore e dice di cambiare l'id della mia listview e scrivero in questa maniera: "@id/android:list". Però il problema persiste dandomi un altro errore.
Adesso posto codice e logcat cosi riuscite a capire meglio  :-)
Ringrazio in anticipo per l'aiuto  :-)
Activity principale
Codice (Java): [Seleziona]
package com.ProvaDB;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ProvaDB extends Activity {
    private final String DB_NAME = "Prova.db";
    private SQLiteDatabase database;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        creaDatabase();
        creaTabellaprova();
        Button inserisci = (Button)findViewById(R.id.inserisci);
        inserisci.setOnClickListener(onSave);
        /*final TextView text = (TextView)findViewById(R.id.text);*/
        Button vedi = (Button) findViewById(R.id.vedi);
        vedi.setOnClickListener(new View.OnClickListener() {                   
                        @Override
                        public void onClick(View v) {
                                Intent intent = new Intent(ProvaDB.this, MyActivity.class);
                                startActivity(intent);
                        }
                });
        }
    private View.OnClickListener onSave = new View.OnClickListener(){
               
                @Override
                public void onClick(View v) {
                        EditText via = (EditText)findViewById(R.id.via);
                        EditText citta = (EditText)findViewById(R.id.citta);
                        EditText prov = (EditText)findViewById(R.id.prov);
                        EditText cap = (EditText)findViewById(R.id.cap);
                        EditText tel = (EditText)findViewById(R.id.tel);
                        String via1 = via.getText().toString();
                        String citta1 = citta.getText().toString();
                        String prov1 = prov.getText().toString();
                        String cap1 = cap.getText().toString();
                        String tel1 = tel.getText().toString();
                        String metti = "Insert into prova( Via_Viale, Citta, Provincia, CAP, Telefono)values('"+via1+"','"+citta1+"','"+prov1+"','"+cap1+"','"+tel1+"');";
                        try{
                               
                                        database.execSQL(metti);
                                        System.out.println("Inserimento avvenuto correttamente");
                       
                        }
                        catch(SQLiteException e){
                                System.out.println("Inserimento non avvenuto correttamente");
                                e.printStackTrace();
                        }
                }      
        };
   
        public void creaDatabase() {
                try{
                        database = openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
                }
                catch(SQLiteException e){
                        System.out.println("non ho creato il database prova");
                        e.printStackTrace();
                }
        }
        public void creaTabellaprova() {
                try{
                       
                        if (database.isOpen()){
                                database.execSQL("CREATE TABLE IF NOT EXISTS prova(_id integer primary key autoincrement, Via_Viale char(50) not null, Citta char(50) not null, Provincia char(50) not null,CAP char(6) not null,Telefono char(50) not null);");
                                System.out.println("sono qui dentro la tabella: "+database.toString());
                        }
                }
                catch(SQLiteException e){
                        String ciao = "inserimento non avvenuto correttamente";
                        Toast.makeText(getBaseContext(), ciao, 3000);
                       
                }
        }
    @Override
    public void onDestroy(){
        super.onDestroy();
        database.close();
    }
   
}

Activity secondaria
Codice (Java): [Seleziona]
package com.ProvaDB;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MyActivity extends ListActivity {
       
        private SQLiteDatabase database;
        private final String DB_NAME = "Prova.db";
       
        @Override
        public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main2);
                String[] dati = new String[100];
                database = openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
                Cursor c = database.query("prova", null, null, null, null, null, null, null);
                int numRows = c.getCount();
                c.moveToFirst();
                for(int i=0; i<numRows;++i){
                        riga r = new riga();
                        r._id=c.getLong(0);
                        r.via=c.getString(1);
                        r.citta=c.getString(2);
                        r.prov=c.getString(3);
                        r.cap=c.getString(4);
                        r.tel=c.getString(5);
                        String record =r.via+" "+r.citta+" "+r.prov+" "+r.cap+" "+r.tel+ "\n" ;
                        dati[i]=record;
                        /*text2.append(dati[i]);*/
                        c.moveToNext();
                }
                setListAdapter(new ArrayAdapter<String>(MyActivity.this,android.R.id.list, dati));
                ListView lv = getListView();
                lv.setTextFilterEnabled(true);
        }
        class riga{
                public long _id;
        public String via;
        public String citta;
        public String prov;
        public String cap;
        public String tel;
    }
}

XML dove e presente la listview

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/linearLayout1"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" >

        <ListView
           android:id="@id/android:list"
           android:layout_width="410dp"
           android:layout_height="wrap_content" >

        </ListView>

    </LinearLayout>

Grazie mille a tutti in anticipo  :-)

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Errore sul popolamento della list view
« Risposta #1 il: 07 Novembre 2011, 09:36:37 CET »
0
Mi sono dimenticato il logcat  :-)

11-07 08:35:49.233: W/dalvikvm(313): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-07 08:35:49.263: E/AndroidRuntime(313): FATAL EXCEPTION: main
11-07 08:35:49.263: E/AndroidRuntime(313): android.content.res.Resources$NotFoundException: File  from xml type layout resource ID #0x102000a
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1916)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1871)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.Resources.getLayout(Resources.java:731)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.AbsListView.obtainView(AbsListView.java:1315)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.ListView.onMeasure(ListView.java:1109)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.View.measure(View.java:8171)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:696)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:306)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.View.measure(View.java:8171)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.View.measure(View.java:8171)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.View.measure(View.java:8171)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.View.measure(View.java:8171)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.os.Looper.loop(Looper.java:123)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.app.ActivityThread.main(ActivityThread.java:4627)
11-07 08:35:49.263: E/AndroidRuntime(313):    at java.lang.reflect.Method.invokeNative(Native Method)
11-07 08:35:49.263: E/AndroidRuntime(313):    at java.lang.reflect.Method.invoke(Method.java:521)
11-07 08:35:49.263: E/AndroidRuntime(313):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-07 08:35:49.263: E/AndroidRuntime(313):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-07 08:35:49.263: E/AndroidRuntime(313):    at dalvik.system.NativeStart.main(Native Method)
11-07 08:35:49.263: E/AndroidRuntime(313): Caused by: java.io.FileNotFoundException:
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.AssetManager.openXmlAssetNative(Native Method)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485)
11-07 08:35:49.263: E/AndroidRuntime(313):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1898)
11-07 08:35:49.263: E/AndroidRuntime(313):    ... 33 more

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Errore sul popolamento della list view
« Risposta #2 il: 07 Novembre 2011, 10:17:36 CET »
+1
Penso che dovresti sostituire nella seconda activity cosi:

Codice: [Seleziona]
setContentView(R.layout.main2); // sostituisci con setContentView(R.layout.linearLayout1);
visto che il layout che hai postato si chiama "main2" e non "linearlayout1"  :-)
« Ultima modifica: 07 Novembre 2011, 11:16:47 CET da theBaffo »
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Errore sul popolamento della list view
« Risposta #3 il: 07 Novembre 2011, 11:09:48 CET »
0
Main e Main2 sono i nomi degli xml delle activity.
Prova a postarli
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Errore sul popolamento della list view
« Risposta #4 il: 07 Novembre 2011, 11:34:21 CET »
0
Sono riuscito a risolvere, grazie mille ;-) in piu ho scoperto che c'era un altro errore perche facevo una cosa stupida, dichiaravo un array di 100 celle, quando invece ne utilizzavo solo 2, cambiando la dimensione dell'array funziona tutto  :D

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Errore sul popolamento della list view
« Risposta #5 il: 07 Novembre 2011, 11:54:11 CET »
0
Sono riuscito a risolvere, grazie mille ;-) in piu ho scoperto che c'era un altro errore perche facevo una cosa stupida, dichiaravo un array di 100 celle, quando invece ne utilizzavo solo 2, cambiando la dimensione dell'array funziona tutto  :D

Prego! Mi raccomando, metti il topic risolto!  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline matpil

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi4c
  • Sistema operativo:
    Linux Mint 17.2 with Mate
Re:Errore sul popolamento della list view
« Risposta #6 il: 18 Novembre 2011, 15:12:44 CET »
0
Sono riuscito a risolvere, grazie mille ;-) in piu ho scoperto che c'era un altro errore perche facevo una cosa stupida, dichiaravo un array di 100 celle, quando invece ne utilizzavo solo 2, cambiando la dimensione dell'array funziona tutto  :D

Ciao!
anche io ho il "problema" di dover visualizzare i dati che ho salvato sul db in una nuova "finestra" composta da una tabella con 4 colonne (almeno mi piacerebbe farlo così).
Vorrei utilizzare il tuo esempio... ma la soluzione al tuo problema qual'è stata? Quella suggerita (oltre alla dim dell'array) oppure c'era altro?

grazie
matpil
App pubblicate sul Market :Ticket counter

Offline Bito92

  • Utente junior
  • **
  • Post: 51
  • Respect: +7
    • Mostra profilo
Re:Errore sul popolamento della list view
« Risposta #7 il: 23 Novembre 2011, 15:06:18 CET »
0
Ciao, quel problema l'ho risolto in una maniera un po diversa da quella suggerita, ti posto il codice cosi e piu chiaro  :-)

Dall'activity che gestiva il popolamento della list view ho tolto il setContent view, e ho creato un file xml chiamato list_item con una semplice textview, e l'ho inserito qui:

Codice (Java): [Seleziona]
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, dati));
                final ListView lv = getListView();
                lv.setTextFilterEnabled(true);

questo e l'xml che ho utilizzato  :-)

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:padding="10dp"
   android:textSize="16sp" >
</TextView>

e una soluzione un po diversa da quella suggerita, pero il tutto funziona, e mi crea una lista in tutto e per tutto, e con questo aggiustamento sono riuscito a risolvere l'errore che mi dava  :-)