Aiuto implementazione DB SQLite

di il
26 risposte

Aiuto implementazione DB SQLite

Salve ragazzi, sto cercando di implementare un database SQLite al cui interno carico tutti i contatti della rubrica, caso vuole che io non ci riesca perciò chiedo aiuto a voi,grazie mille a tutti coloro che risponderanno.
codice DB:

public class DBcont  {
	 private static final String DB_NAME="DBJACK";//nome del db
     private static final int DB_VERSION=1;

protected static final String nome="";
protected static final String _id="";
protected static final String numero="";
final String sql="CREATE TABLE CONTATTI ("+"_id PRIMARY KEY AUTOINCREMENT UNIQUE," + "nome text NOT NULL"+"numero text NOT NULL);";
String g;
SQLiteDatabase db;
DBHelper mDbHelper;
Context mContext;

public  DBcont(Context ctx){
	mContext=ctx;
	mDbHelper=new DBHelper(ctx,DB_NAME,null,DB_VERSION);
}
public void open(){
	
	db=mDbHelper.getWritableDatabase();
}
public void close(){
	db.close();
}
 public void inserisci(String nome1, String numero1,String id){
	
	ContentValues value = null;
	 value.put(_id, id);
	 value.put(nome, nome1);
	 value.put(numero, numero1);
	 db.insert(sql, null, value);
	 
}
 public String leggi(String search){
	
	 Ricerca r=new Ricerca();
	Cursor cur= db.query( sql, null, nome, null, null, search, "ASC", null);
	int i=0;
	
	while(cur.moveToNext()){
		i++;
		String wanted=cur.getString(cur.getColumnIndex(nome));
		
	if(r.search(search,wanted)==true){
	  g=r.getMach(); 
	  return g;
	 }
	}
	return "alcuna corrispondenza trovata";
 }
private class DBHelper extends SQLiteOpenHelper{

	
	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(sql);
		
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}
	
}

}

Codice App:

public class MainActivity extends Activity {
	String _id=ContactsContract.CommonDataKinds.Phone._ID;
	String Nome=ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
	String Numero=ContactsContract.CommonDataKinds.Phone.NUMBER;
	Uri uri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
	String sortOrder=ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"ASC";
	String colonna[]={_id,Nome,Numero};
 Button bottone;
 TextView testo,testo2;
 DBcont db=new DBcont(getApplicationContext());
 private static final int REQUEST_CODE=1979;	
 public void onCreate(Bundle savedInstanceState){
	 
  super.onCreate(savedInstanceState);	
   setContentView(R.layout.jack_layout);
   bottone=(Button)findViewById(R.id.bottone);
   testo=(TextView)findViewById(R.id.text1);
   testo2=(TextView)findViewById(R.id.textView1);
   
 }
public void speakButtonClicked(View v){
	getContatti();
	Ascolto();	
	
}	
 public void Ascolto(){
	Intent StT=new Intent();
	StT.setAction(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
	
	StT.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
	StT.putExtra(RecognizerIntent.EXTRA_PROMPT,"Acquisizione audio,riconoscimento...");
	startActivityForResult(StT,REQUEST_CODE);
	
 }	
 
 public void getContatti(){
	 ContentResolver cr = getContentResolver();
db.open();
	 ContentResolver pcr = getContentResolver();
	 Cursor cur=cr.query(uri, null, null, null, sortOrder);
	Cursor Pcur;
	 while(cur.moveToNext()){
		String nome=cur.getString(cur.getColumnIndex(Nome));
		String id=cur.getString(cur.getColumnIndex(_id));
		String Tid[]={id};
		
		Pcur=pcr.query(uri, colonna, id, Tid, null);
		if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER)))>0){
			while(Pcur.moveToNext()){
				String numero=Pcur.getString(Pcur.getColumnIndex(Numero));
		db.inserisci(nome, numero, id);	
			}
			
			Pcur.close();
		}
	
	}
	 Toast t=Toast.makeText(getApplicationContext(), "Database caricato", Toast.LENGTH_LONG);
			 t.show();;
			 db.close();
	cur.close(); 
	 
 }
 protected void onActivityResult(int requestCode,int resultCode,Intent data){
 if(requestCode==REQUEST_CODE && resultCode==RESULT_OK){
	 ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
      testo2.setText(matches.get(0));
    db.open();
       db.leggi(matches.get(0));
       
 }
super.onActivityResult(requestCode, resultCode, data);	
 }
}
L'errore credo consista in una sbagliata implementazione del Context...perdonate l'ignoranza.

26 Risposte

  • Re: Aiuto implementazione DB SQLite

    Che errore ti da? Da una rapida occhiata ho visto un possibile null pointer exception:
    
    ContentValues value = null;
    value.put(...);
    

    Sent from my iPhone using Tapatalk
  • Re: Aiuto implementazione DB SQLite

    Ciao Della grazie per la risposta, allora nel Debug mi da questo problema:ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2171

    Credo sia dipeso da questo:
    db.open()
    public void open(){
       
       db=mDbHelper.getWritableDatabase();
    }
    Ancora Grazie mille per l'aiuto.
  • Re: Aiuto implementazione DB SQLite

    Prova a postare il logcat per intero, magari ci da qualche info in più
  • Re: Aiuto implementazione DB SQLite

    OK ecco il log
    06-12 21:05:11.148: E/C2DMRegistrar(16545): [C2DMReg] handleRequest caught java.net.UnknownHostException: Unable to resolve host "android.clients.google.com": No address associated with hostname
    06-12 21:05:13.750: E/Watchdog(16058): !@Sync 14621
    06-12 21:05:43.760: E/Watchdog(16058): !@Sync 14622
    06-12 21:06:12.788: E/SEC PowerHAL(16058): sysfs_write : Error opening /sys/class/input/input12/enabled: No such file or directory
    06-12 21:06:12.788: E/SEC PowerHAL(16058): sysfs_write : Error opening /sys/class/input/input5/enabled: No such file or directory
    06-12 21:06:13.198: E/NotificationService(16058): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
    06-12 21:06:13.319: E/lights(16058): write_int failed to open -1
    06-12 21:06:13.549: E/NotificationService(16058): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
    06-12 21:06:13.859: E/Watchdog(16058): !@Sync 14623
    06-12 21:06:13.899: E/NfcService(16850): callback == null
    06-12 21:06:13.909: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:13.909: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:13.909: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:13.909: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:14.019: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:14.019: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:14.019: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:14.019: E/LSO(16058): LSO Service is not yet ready!!!
    06-12 21:06:14.219: E/NotificationService(16058): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
    06-12 21:06:15.160: E/C2DMRegistrar(16545): [C2DMReg] handleRequest caught java.net.UnknownHostException: Unable to resolve host "android.clients.google.com": No address associated with hostname
    06-12 21:06:41.006: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:06:42.607: E/dalvikvm(16615): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:06:43.668: E/dalvikvm(16615): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:06:43.858: E/Watchdog(16058): !@Sync 14624
    06-12 21:06:44.729: E/dalvikvm(16615): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:06:48.463: E/dalvikvm(16615): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:06:48.793: E/dalvikvm(16615): adjustAdaptiveCoef max=6291456, min=1572864, ut=368
    06-12 21:07:02.477: E/installd(137): ECS_ECS: * do_linklib  pkg [com.llc.jack]
    06-12 21:07:02.477: E/installd(137): ECS_ECS: do_linklib Normal package
    06-12 21:07:02.477: E/installd(137): ECS_ECS: Restting the data Path to -data-  ret [0]
    06-12 21:07:02.567: E/installd(137): ECS_ECS: * do_dexopt  pkg [/data/app/com.llc.jack-2.apk]
    06-12 21:07:02.567: E/installd(137): ECS_ECS: do_dexopt Normal package
    06-12 21:07:03.027: E/installd(137): ECS_ECS: Restting the data Path to -data-  ret [0]
    06-12 21:07:03.147: E/installd(137): ECS_ECS: * do_move_dex  pkg [/data/app/com.llc.jack-2.apk]
    06-12 21:07:03.147: E/installd(137): ECS_ECS: do_move_dex Normal package
    06-12 21:07:03.147: E/installd(137): ECS_ECS: Restting the data Path to -data-  ret [0]
    06-12 21:07:04.599: E/SEC PowerHAL(16058): sysfs_write : Error opening /sys/class/input/input12/enabled: No such file or directory
    06-12 21:07:04.599: E/SEC PowerHAL(16058): sysfs_write : Error opening /sys/class/input/input5/enabled: No such file or directory
    06-12 21:07:07.011: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.011: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.021: E/lights(16058): write_led_info failed to open -1
    06-12 21:07:07.311: E/NfcService(16850): callback == null
    06-12 21:07:07.582: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:07:09.964: E/SQLiteLog(29972): (1) AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
    06-12 21:07:10.885: E/MotionRecognitionService(16058):   mReceiver.onReceive : ACTION_USER_PRESENT  :: UNLOCK SCREEN
    06-12 21:07:10.895: E/NfcService(16850): callback == null
    06-12 21:07:11.535: E/dalvikvm(30105): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:07:11.696: E/dalvikvm(30105): adjustAdaptiveCoef max=6291456, min=1572864, ut=368
    06-12 21:07:11.826: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:07:12.717: E/SQLiteLog(30144): (1) no such table: mmsconfig
    06-12 21:07:12.717: E/Babel(30144): canonicalizeMccMnc: invalid mccmnc nullnull
    06-12 21:07:13.597: E/dalvikvm(30172): adjustAdaptiveCoef max=6291456, min=1572864, ut=568
    06-12 21:07:13.868: E/Watchdog(16058): !@Sync 14625
    06-12 21:07:14.068: E/dalvikvm(30122): Could not find class 'android.app.AppOpsManager', referenced from method buw.a
    06-12 21:07:15.880: E/dalvikvm(30235): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:07:16.220: E/dalvikvm(30172): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
    06-12 21:07:16.230: E/dalvikvm(30235): adjustAdaptiveCoef max=6291456, min=1572864, ut=368
    06-12 21:07:16.700: E/dalvikvm(30172): adjustAdaptiveCoef max=6291456, min=1572864, ut=368
    06-12 21:07:17.271: E/dalvikvm(30235): Could not find class 'android.telephony.CellInfoWcdma', referenced from method com.facebook.common.hardware.CellDiagnosticsSerializer.c
    06-12 21:07:18.482: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:07:20.614: E/dalvikvm(30460): adjustAdaptiveCoef max=6291456, min=1572864, ut=568
    06-12 21:07:21.385: E/dalvikvm(30477): Could not find class 'android.app.AppOpsManager', referenced from method buw.a
    06-12 21:07:22.086: E/SQLiteLog(30500): (1) no such table: mmsconfig
    06-12 21:07:22.106: E/Babel(30500): canonicalizeMccMnc: invalid mccmnc nullnull
    06-12 21:07:23.097: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:07:37.881: E/dalvikvm(15769): adjustAdaptiveCoef max=4194304, min=1048576, ut=312
    06-12 21:07:38.201: E/dalvikvm(30792): adjustAdaptiveCoef max=6291456, min=1572864, ut=568
    06-12 21:07:38.482: E/dalvikvm(30792): adjustAdaptiveCoef max=8388608, min=2097152, ut=368
    06-12 21:07:43.867: E/Watchdog(16058): !@Sync 14626
    06-12 21:07:50.664: E/WifiStateMachine(16058): Error! unhandled message{ what=131205 when=0 }
    06-12 21:07:50.764: E/WifiStateMachine(16058): Error! unhandled message{ what=131205 when=0 }
    06-12 21:08:13.876: E/Watchdog(16058): !@Sync 14627
    : E/(): Device disconnected
    
  • Re: Aiuto implementazione DB SQLite

    Credo che l'errore si verifichi quando apro il database con il metodo open() ma non riesco a capire perché.... grazie mille per l'aiuto e per la pazienza Della
  • Re: Aiuto implementazione DB SQLite

    Penso che l'errore sia questo:
    AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
    In pratica hai omesso la keyword INTEGER:
    CREATE TABLE CONTATTI ("+"_id INTEGER PRIMARY KEY AUTOINCREMENT...
  • Re: Aiuto implementazione DB SQLite

    Della grazie mille dell'aiuto...ora mi da un altro errore ma credo che riuscirò a risolvere

    Inviato dal mio GT-I9105P utilizzando Tapatalk
  • Re: Aiuto implementazione DB SQLite

    Allora giusto per mostrare come ho risolto oltre ad aggiungere INTEGER come suggerito da Della ho anche modifica la stringa sql nel seguente modo:
    String sql="CREATE: TABLE CONTATTI ("+"_id INTEGER PRIMARY KEY AUTOINCREMENT,"+"nome text NOT NULL,"+"numero text NOT NULL);";
    GRAZIE ANCORA DELLA

    Inviato dal mio GT-I9105P utilizzando Tapatalk
  • Re: Aiuto implementazione DB SQLite

    Di niente, però quei "due punti"dopo il CREATE non dovrebbero esserci.. Non ti segnala errore?
    Nota che per forzare a ricreare il DB è necessario disinstallare e reinstallare l'app!
  • Re: Aiuto implementazione DB SQLite

    No anzi cosi funziona

    Inviato dal mio GT-I9105P utilizzando Tapatalk
  • Re: Aiuto implementazione DB SQLite

    Il motivo per cui ora non ti segnala errori può derivare dal fatto che, essendo il DB già esistente, quella parte di codice non viene mai eseguita. Per essere sicuro al 100% dovresti, quindi, disinstallare è reinstallare la tua app (o, equivalentemente, eliminare il database da ADB e rilanciare l'app, ma quest'ultima strada è più lunga)


    Sent from my iPhone using Tapatalk
  • Re: Aiuto implementazione DB SQLite

    Hai ragione Della eliminando l'app e reinstallandola l'app smette di funzionare.... ho tolto i due puntini e funziona (ho disinstallato e reinstallato l'app ).
    Della due domande come faccio a fargli creare il DB solo se non esiste e se esiste a farglielo aprire semplicemente e nel caso aggiornarlo,perdonami se ti faccio tutte queste domande ma non ho una guida di riferimento...
    Grazie ancora per la pazienza e per il tempo dedicatomi Della.
  • Re: Aiuto implementazione DB SQLite

    Beh il fatto di creare il DB solo se non esiste viene già gestito dal metodo "onCreate" del DB helper. Dopodiché puoi "giocare" col numero di versione per effettuare degli aggiornamenti. In pratica se nel costruttore dell'helper passi un numero di versione maggiore di quello del DB attuale, allora viene automaticamente chiamato il metodo "onUpgrade", all'interno del quale può fare le dovute modifiche!
  • Re: Aiuto implementazione DB SQLite

    Ok, ho capito grazie ancora Della.
Devi accedere o registrarti per scrivere nel forum
26 risposte