Autore Topic: Problema Db Sqlite  (Letto 989 volte)

Offline applab

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
Problema Db Sqlite
« il: 02 Luglio 2011, 17:08:26 CEST »
0
Salve a tutti,
Premetto che ho letto vari tutorial in giro per la rete, compreso il vostro... ma cmq non riesco a venire a capo. Io ho un db in sqlite che inserisco nella cartella assets/db dopodichè creo questa classe:

Codice (Java): [Seleziona]
package it.applab.prova;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;


public class SQLiteDBHelper extends SQLiteOpenHelper {

        private static String DB_PATH = "/data/data/it.applab.prova/databases/";

        private static String DB_NAME = "Location.db";
       
        private static String ASSETS_DB_FOLDER = "db";
       
        private SQLiteDatabase myDataBase;

        private final Context myContext;

       
        public SQLiteDBHelper(Context context) {
                super(context, DB_NAME, null, 1);
                this.myContext = context;
        }

       
        /**
         * Creates a empty database on the system and overwrite it with your own
         * database.
         **/

        public void createDatabase() throws IOException {
            boolean dbExist = checkDatabase();
                if (!dbExist) {
                        super.getReadableDatabase();
                        try {
                                copyDatabase();
                        }
                        catch (IOException e) {
                                throw new Error("Error copying database");
                        }
                }
        }

        /**
         * Check if the database already exist to avoid re-copying the file each
         * time you open the application.
         *
         * @return true if it exists, false if it doesn't
         */

        private boolean checkDatabase() {
                SQLiteDatabase checkDB = null;

                try {
                        String myPath = DB_PATH + DB_NAME;
                        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY|SQLiteDatabase.NO_LOCALIZED_COLLATORS);
                }
                catch (SQLiteException e) {
                        // database does't exist yet.
                }

                if (checkDB != null) {
                        checkDB.close();
                }
                return checkDB != null ? true : false;
        }

        private void copyDatabase() throws IOException {
                String[] dbFiles = myContext.getAssets().list(ASSETS_DB_FOLDER);
                String outFileName = DB_PATH + DB_NAME;
                OutputStream myOutput = new FileOutputStream(outFileName);
                for(int i =0; i < dbFiles.length; i++) {
                        InputStream myInput = myContext.getAssets().open(ASSETS_DB_FOLDER+"/"+dbFiles[i]);
                        byte[] buffer = new byte[1024];
                        int length;
                        while ((length = myInput.read(buffer)) > 0) {
                                myOutput.write(buffer, 0, length);
                        }
                        myInput.close();
                }
                myOutput.flush();
                myOutput.close();
        }

        public void openDatabase() throws SQLException {
                // Open the database
                String myPath = DB_PATH + DB_NAME;
                myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY|SQLiteDatabase.NO_LOCALIZED_COLLATORS);
        }

        @Override
        public synchronized void close() {
                if (myDataBase != null) myDataBase.close();
                super.close();
        }

        @Override
        public void onCreate(SQLiteDatabase db) { }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
       
        @Override
        public synchronized SQLiteDatabase getReadableDatabase (){
                try {
                        createDatabase();
                        openDatabase();
                }
                catch (SQLException e) {
                        myDataBase = null;
                        e.printStackTrace();
                }
                catch (IOException e) {
                        myDataBase = null;
                        e.printStackTrace();
                }
                return myDataBase;
        }
}

e qui la mia activity:

Codice (Java): [Seleziona]
package it.applab.prova;

import it.applab.prova.SQLiteDBHelper;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class ProvaActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
       

        SQLiteDBHelper dbh = new SQLiteDBHelper(this);
        SQLiteDatabase db = dbh.getReadableDatabase();
       
        Cursor ca = db.query("comuni", new String[] {"codiceRegione","codiceProvincia","codiceComune,comune"}, null, null, null, null, null);
        startManagingCursor(ca);
        setContentView(R.layout.main);
    }
}

L'applicazione crasha al momento in cui arriva qua: Cursor ca = db.query("comuni", new String[] {"codiceRegione","codiceProvincia","codiceComune,comune"}, null, null, null, null, null);

Questo è quello che mi dice quando vado in debug: ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2663   


Sapreste darmi indicazioni su quale può essere il problema? Grazie mille!

Offline Audrey

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD eclair 5554
  • Sistema operativo:
    Windows XP
Re:Problema Db Sqlite
« Risposta #1 il: 24 Agosto 2011, 16:31:31 CEST »
0
Ragazzi confido in voi!
Spiego brevemente, ho un db che gestisce i punti d'interesse (3 dei quali già inseriti da codice). Ho modificato il tutto facendo in modo di inserirne di nuovi direttamente dalla app in esecuzione e di cancellare o modificare quelli già presenti con un click lungo sugli stessi. SICURAMENTE ho sbagliato cose ridicole perchè ho adattato un codice di un altro progetto..ma al momento non riesco a venirne fuori :( vi posto codice e LogCat..grazie mille in anticipo!

DataPoi
Codice (Java): [Seleziona]
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class DataPoi {

        SQLiteDatabase Dp;
        DbHelper DpHelper;
        Context mContext;
        public long id;
        public String nome;
        public String latitudine;
        public String longitudine;
        public String url;
                public String categoria;

        private static final String DB_NAME = "DbStatic";// nome del db
        private static final int DB_VERSION = 1; // numero di versione del nostro db

        public DataPoi(Context ctx) {
               
                mContext = ctx;
                DpHelper = new DbHelper(ctx, DB_NAME, null, DB_VERSION); // quando
                // istanziamo
                // questa
                // classe,
                // istanziamo
                // anche
                // l'helper
                // (vedi
                // sotto)
        }

        public void open() { // il database su cui agiamo è leggibile/scrivibile
                Dp = DpHelper.getWritableDatabase();

        }

        public void close() { // chiudiamo il database su cui agiamo
                Dp.close();
        }

        // i seguenti 2 metodi servono per la lettura/scrittura del db.
        // aggiungete e modificate a discrezione

        public void insertPoi(String nome, String latitudine, String longitudine, String url, String categoria) { // metodo
                // per
                // inserire
                // i
                // dati
                ContentValues cv = new ContentValues();
                cv.put(PoiMetaData.POI_NOME_KEY, nome);
                cv.put(PoiMetaData.POI_LATITUDINE_KEY, latitudine);
                cv.put(PoiMetaData.POI_LONGITUDINE_KEY, longitudine);
                cv.put(PoiMetaData.POI_URL_KEY, url);
                cv.put(PoiMetaData.POI_CATEGORIA_KEY, categoria);
                Dp.insert(PoiMetaData.POI_TABLE, null, cv);
        }

        public void deleteAllPoi() { // metodo
                Dp.delete(PoiMetaData.POI_TABLE, null, null);
        }

        public Cursor fetchPoi() { // metodo per fare la query di tutti i dati
                return Dp.query(PoiMetaData.POI_TABLE, null, null, null, null, null, null);
        }

        static class PoiMetaData { // i metadati della tabella, accessibili ovunque
                static final String POI_TABLE = "poi";
                static final String ID = "_id";
                static final String POI_NOME_KEY = "Nome";
                static final String POI_LATITUDINE_KEY = "Latitudine";
                static final String POI_LONGITUDINE_KEY = "Longitudine";
                static final String POI_URL_KEY = "Url";
                static final String POI_CATEGORIA_KEY = "Categoria";
        }

        private static final String POI_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "
                        // codice sql di creazione della tabella
                        + PoiMetaData.POI_TABLE + " (" + PoiMetaData.ID + " integer primary key autoincrement, " + PoiMetaData.POI_NOME_KEY + " text not null, " + PoiMetaData.POI_LATITUDINE_KEY
                        + " double not null, " + PoiMetaData.POI_LONGITUDINE_KEY + " double not null, " + PoiMetaData.POI_URL_KEY + " text not null, " + PoiMetaData.POI_CATEGORIA_KEY + " text not null);";

        private class DbHelper extends SQLiteOpenHelper { // classe che ci aiuta
                // nella creazione del
                // db

                public DbHelper(Context context, String Nome, CursorFactory factory, int version) {
                        super(context, Nome, factory, version);
                }

                @Override
                public void onCreate(SQLiteDatabase _db) { // solo quando il db viene
                        // creato, creiamo la
                        // tabella
                        _db.execSQL(POI_TABLE_CREATE);
                }

                @Override
                public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                        // qui mettiamo eventuali modifiche al db, se nella nostra nuova
                        // versione della app, il db cambia numero di versione

                }

               
           
                }

        }

DbActivity
Codice (Java): [Seleziona]
package it.apogeo.android.sqlite.gestione_poi;

import it.apogeo.android.sqlite.gestione_poi.DataPoi.PoiMetaData;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.AdapterView.AdapterContextMenuInfo;




public class DbStaticActivity extends Activity {// Identificatore del risultato di update
        private final static int UPDATE_ACTIVITY_RESULT = 2;
// Identificatore delle voci del Menu Contestuale
    private final static int DELETE_MENU_OPTION = 1;
    private final static int UPDATE_MENU_OPTION = 2;
 // Identificatore del risultato di creazione
        private final static int CREATE_ACTIVITY_RESULT = 1;
        // Identificatore della versioe
        private final static int DB_VERSION = 1;
        // Tag del Log
        private final static String TAG_LOG = "DbStaticActivity";

        /*
         * Riferimento al DB
         */

        private SQLiteDatabase db;
        /*
         * Cursore dei risultati
         */

        private Cursor cursor;
        /*
         * Riferimento all'Adpater
         */

        private CursorAdapter adapter;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.db_layout);
             
           
             
             
                ListView poiLv = (ListView) findViewById(R.id.poiLv);

                DataPoi db = new DataPoi(getApplicationContext());
                db.open(); // apriamo il db

                db.deleteAllPoi();
                // if (db.fetchPoi().getCount() == 0) {// inserimento dati

                db.insertPoi("McDonald", "4.294837", "4.4298347", "www.mcdonald.it", "FastFood");
                db.insertPoi("BurgerKing", "4.294837", "4.4298347", "www.burgerking.it", "FastFood");
                db.insertPoi("Acqua&Sapone", "6.28376", "6.29382", "www.acquaesapone.it", "Negozio");
                db.insertPoi("Rinascente", "6.28376", "6.29382", "www.rinascente.it", "Negozio");
                // }

                Cursor c = db.fetchPoi(); // query

                startManagingCursor(c);

                SimpleHeadersCursorAdapter adapter = new SimpleHeadersCursorAdapter( // semplice
                                // adapter per i
                                // cursor
                                this, R.layout.poi, // il layout di ogni riga/prodotto
                                c, new String[] { DataPoi.PoiMetaData.POI_NOME_KEY, DataPoi.PoiMetaData.POI_LATITUDINE_KEY, DataPoi.PoiMetaData.POI_LONGITUDINE_KEY, DataPoi.PoiMetaData.POI_URL_KEY,
                                                DataPoi.PoiMetaData.POI_CATEGORIA_KEY },// questi
                                // colonne
                                new int[] { R.id.nomeTv, R.id.latitudineTv, R.id.longitudineTv, R.id.urlTv, R.id.categoriaTv });// in
                // queste
                // views

                poiLv.setAdapter(adapter); // la listview ha questo adapter

             
               


                db.close();

        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // L'unico possibile menu e' quello di creazione per cui non serve
                // fare controlli
                menu.add(Menu.FIRST, Menu.FIRST, Menu.FIRST, R.string.create_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Dobbiamo gestire l'Intent in questo modo perchè lo dobbiamo
                // eseguire con o startActivityForResult e non semplicemente come
                // Intent
                Intent createIntent = new Intent(this, EditPOI.class);
                startActivityForResult(createIntent, CREATE_ACTIVITY_RESULT);
                return true;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Creiamo il Menu da associare all'item
                int group = Menu.FIRST;
                menu.add(group, DELETE_MENU_OPTION, Menu.FIRST, R.string.delete_option);
                menu.add(group, UPDATE_MENU_OPTION, Menu.FIRST + 1,
                                R.string.update_option);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                long datapoiId = info.id;
                switch (item.getItemId()) {
                case DELETE_MENU_OPTION:
                        // Lo cancelliamo
                        db = dbHelper.getWritableDatabase();
                        db.delete("POI_TABLE", "_id=" + datapoiId, null);
                        // Aggiorniamo
                        updateListView();
                        return true;
                case UPDATE_MENU_OPTION:
                        // Dobbiamo inviarel'Intent con il Team alla Activity per
                        // l'editazione
                       
Cursor tmpCursor = db.query(PoiMetaData.POI_TABLE, null, "_id=" + datapoiId, null, null, null, null, null);
               
               
                       
                        if (tmpCursor.moveToNext()) {
                                Intent updateIntent = new Intent(this, EditPOI.class);
                                DataPoi datapoi = new DataPoi(null);
                                Bundle datapoiBundle = new Bundle();
                               
                       
                                 
                                datapoi.nome= tmpCursor.getString(tmpCursor
                                                .getColumnIndex(PoiMetaData.POI_NOME_KEY));
                                datapoi.latitudine = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(PoiMetaData.POI_LATITUDINE_KEY));
                                datapoi.longitudine= tmpCursor.getString(tmpCursor
                                                .getColumnIndex(PoiMetaData.POI_LONGITUDINE_KEY));
                                datapoi.url = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(PoiMetaData.POI_URL_KEY));
                                datapoi.categoria = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(PoiMetaData.POI_CATEGORIA_KEY));
                                updateIntent.putExtra("datapoi", datapoiBundle);
                                startActivityForResult(updateIntent, UPDATE_ACTIVITY_RESULT);
                        }
                        return true;
                default:
                        return super.onContextItemSelected(item);
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               
                switch (resultCode) {
                case Activity.RESULT_OK:
                        // Salviamo il risultato nel DB
                        Bundle extra = data.getBundleExtra("datapoi");
                        DataPoi datapoi = (DataPoi) extra.getParcelable("datapoi");
                       
                        ContentValues cv = new ContentValues();
            cv.put(PoiMetaData.POI_NOME_KEY, datapoi.nome);
            cv.put(PoiMetaData.POI_LATITUDINE_KEY, datapoi.latitudine);
            cv.put(PoiMetaData.POI_LONGITUDINE_KEY, datapoi.longitudine);
            cv.put(PoiMetaData.POI_URL_KEY, datapoi.url);
            cv.put(PoiMetaData.POI_CATEGORIA_KEY, datapoi.categoria);
            db.insert(PoiMetaData.POI_TABLE, null, cv);
                        db = dbHelper.getWritableDatabase();
                        // A seconda del tipo di risposta facciamo un inserimento o un
                        // update
                        switch (requestCode) {
                        case CREATE_ACTIVITY_RESULT:
                                db.insert("POI_TABLE", null, cv);
                                break;
                        case UPDATE_ACTIVITY_RESULT:
                                db.update("POI_TABLE", cv, null, null);
                                break;
                        default:
                                break;
                        }
                default:
                        break;
                }
        }
       

        /*
         * Metodo di utilità che permettedi aggiornare il contenuto della ListView
         */

        private void updateListView() {
                // Diciamo al Cursor di rieseguire la query
                cursor.requery();
                // Notifichiamo le View associte agli adapter di fare il refresh
                adapter.notifyDataSetChanged();
        }

        private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "Db_Static", null, DB_VERSION) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(TAG_LOG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"POI_TABLE\" (");
                       
                        createQuery.append("        \"nome\" TEXT NOT NULL,");
                        createQuery.append("        \"latitudine\" TEXT NOT NULL,");
                        createQuery.append("        \"longitudine\" TEXT NOT NULL,");
                        createQuery.append("        \"url\" TEXT NOT NULL, ");
                        createQuery.append("         \"categoria\" TEXT NOT NULL,");
                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(TAG_LOG, "Aggiornamento non implementato");
                }

        };

}

Codice (Java): [Seleziona]
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

edit poi
[code=java]import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;


public class EditPOI extends Activity {
        /*
         * Identificatore del menu di salva
         */

        private final static int SAVE_MENU_OPTION = 0;
        /*
         * Identificatore del menu di annulla
         */

        private final static int CANCEL_MENU_OPTION = 1;

        // Riferimento ai diversi campi di editazione
        private EditText nomeEdit;
        private EditText latitudineEdit;
        private EditText longitudineEdit;
        private EditText urlEdit;
        private EditText categoriaEdit;

        // Oggetto da creare o editare
        private DataPoi datapoi;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.edit_db_layout);
                // Riferimento ai campi di editazione
                nomeEdit = (EditText) findViewById(R.id.nomeEdit);
                latitudineEdit = (EditText) findViewById(R.id.latitudineEdit);
                longitudineEdit = (EditText) findViewById(R.id.longitudineEdit);
                urlEdit = (EditText) findViewById(R.id.urlEdit);
                categoriaEdit = (EditText) findViewById(R.id.categoriaEdit);
                // Verifichiamo la presenza di un dato associato all'intent di partenza
                Bundle datapoiBundle = getIntent().getBundleExtra("datapoi");
                // Se diverso da null valorizziamo i vari campi
                if (datapoiBundle != null) {
                        datapoi = (DataPoi) datapoiBundle.getParcelable("datapoi");
                        nomeEdit.setText(datapoi.nome);
                        latitudineEdit.setText(datapoi.latitudine);
                        longitudineEdit.setText(datapoi.longitudine);
                        urlEdit.setText(datapoi.url);
                        categoriaEdit.setText(datapoi.categoria);
                } else {
                        datapoi = new DataPoi(null);
                }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Creiamo le due voci di salva ed annulla
                menu.add(Menu.FIRST, SAVE_MENU_OPTION, Menu.FIRST,
                                                R.string.save_option);
                menu.add(Menu.FIRST + 1, CANCEL_MENU_OPTION, Menu.FIRST + 1,
                                R.string.cancel_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // A seconda dell'id dell'item selezionato eseguiamo
                // le corrispondenti operazioni
                int itemId = item.getItemId();
                if (itemId == SAVE_MENU_OPTION) {
                        // Dobbiamo passare le informazioni alla attività chiamante
                        Intent data = new Intent();
                        Bundle datapoiBundle = new Bundle();
                        datapoi.nome = nomeEdit.getText().toString();
                        datapoi.latitudine= latitudineEdit.getText().toString();
                        datapoi.longitudine = longitudineEdit.getText().toString();
                        datapoi.url = urlEdit.getText().toString();
                        datapoi.categoria = categoriaEdit.getText().toString();
                       
                        data.putExtra("datapoi", datapoiBundle);
                        setResult(Activity.RESULT_OK, data);
                        finish();
                        // La gestione della selezione dell'item e' finita
                        return true;
                } else if (itemId == CANCEL_MENU_OPTION) {
                        // Cancelliamo l'operazione chiamando finish
                        finish();
                        // La gestione della selezione dell'item e' finita
                        return true;
                } else {
                        // Rimandiamo alla gestione classica
                        return super.onOptionsItemSelected(item);
                }
        }

}


e il logcat...

08-24 14:30:33.339: ERROR/AndroidRuntime(230): FATAL EXCEPTION: main
08-24 14:30:33.339: ERROR/AndroidRuntime(230): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {it.apogeo.android.sqlite.gestione_poi/it.apogeo.android.sqlite.gestione_poi.DbStaticActivity}: java.lang.NullPointerException
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.os.Looper.loop(Looper.java:123)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at java.lang.reflect.Method.invokeNative(Native Method)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at java.lang.reflect.Method.invoke(Method.java:521)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at dalvik.system.NativeStart.main(Native Method)
08-24 14:30:33.339: ERROR/AndroidRuntime(230): Caused by: java.lang.NullPointerException
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at it.apogeo.android.sqlite.gestione_poi.DbStaticActivity.onActivityResult(DbStaticActivity.java:218)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
08-24 14:30:33.339: ERROR/AndroidRuntime(230):     ... 11 more


se provo ad effettuare il click lungo non succede nulla, mentre se faccio menu, inserisci poi, scrivo i dati e clicco salva mi crasha... :'(