NullPointerException avec SQLite
Bonsoir,
j'éprouve quelque difféculté à me conneter avec une base de donnée sqlite sous android je me suis inspiré de ce tutoriel http://a-renouard.developpez.com/tut...ndroid/sqlite/ j'ai fait trois classe les voici
classe metier User
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package com.example.crud;
public class User {
private int id;
private String username;
private String password;
private String email;
public User() {
super();
}
public User(int id, String username, String password, String email) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
} |
classe pour créer la base et gérer la connexion avec la base de donnée sqlite
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package com.example.crud;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHandler extends SQLiteOpenHelper{
public static final String USER_KEY="idu";
public static final String USERNAME="username";
public static final String PASSWORD="password";
public static final String EMAIL="email";
public static final String TABLE="user";
public static final String TABLE_CEATE=
"CREATE TABLE "+TABLE+" ("+
USER_KEY+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
USERNAME+" TEXT,"+
PASSWORD+", TEXT"+
EMAIL+" TEXT);";
public static final String TABLE_DROP="DROP TABLE IF EXISTS "+TABLE+";";
public DatabaseHandler(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CEATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(TABLE_DROP);
onCreate(db);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
package com.example.crud;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class UserDAO {
private static final int VERSION_BDD = 2;
private static final String NOM_BDD = "users.db";
public static final String USER_KEY="idu";
public static final String USERNAME="username";
public static final String PASSWORD="password";
public static final String EMAIL="email";
public static final String TABLE="user";
public static final String TABLE_CEATE=
"CREATE TABLE "+TABLE+" ("+
USER_KEY+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
USERNAME+" TEXT,"+
PASSWORD+", TEXT"+
EMAIL+" TEXT);";
public static final String TABLE_DROP="DROP TABLE IF EXISTS "+TABLE+";";
static private SQLiteDatabase bdd=null;
DatabaseHandler dtb;
public UserDAO(Context cntx){
dtb=new DatabaseHandler(cntx, NOM_BDD, null, VERSION_BDD);
}
public void open(){
if(bdd!=null){
bdd=dtb.getWritableDatabase();
}
}
public long insertUser(User user){
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
values.put(EMAIL, user.getEmail());
return bdd.insert(TABLE, null, values);
}
public User getUser(String username){
Cursor c = bdd.rawQuery("select " + USERNAME + " from " + TABLE
+ " where username='?'", new String[]{username});
return cursorToLivre(c);
}
private User cursorToLivre(Cursor c){
//si aucun élément n'a été retourné dans la requête, on renvoie null
if (c.getCount() == 0)
return null;
//Sinon on se place sur le premier élément
c.moveToFirst();
//On créé un livre
User user = new User();
//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
user.setId(c.getInt(0));
user.setUsername(c.getString(1));
user.setEmail(c.getString(3));
//On ferme le cursor
c.close();
//On retourne le livre
return user;
}
} |
finalement l'activité qui appelle le tous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
package com.example.crud;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserDAO userd=new UserDAO(this);
User user=new User(1, "login", "passwo", "email@gmail.com");
userd.open();
userd.insertUser(user);
User userresultat=userd.getUser(user.getUsername());
if(userresultat != null){
//On affiche les infos du livre dans un Toast
Toast.makeText(this, userresultat.toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
} |
et voilà ce que m'affiche le logcat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
12-23 16:41:12.436: E/Trace(1917): error opening trace file: No such file or directory (2)
12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
12-23 16:41:12.606: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
12-23 16:41:12.606: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
12-23 16:41:13.106: D/AndroidRuntime(1917): Shutting down VM
12-23 16:41:13.106: W/dalvikvm(1917): threadid=1: thread exiting with uncaught exception (group=0xb5cb3908)
12-23 16:41:13.136: E/AndroidRuntime(1917): FATAL EXCEPTION: main
12-23 16:41:13.136: E/AndroidRuntime(1917): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.crud/com.example.crud.MainActivity}: java.lang.NullPointerException
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.os.Handler.dispatchMessage(Handler.java:99)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.os.Looper.loop(Looper.java:137)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-23 16:41:13.136: E/AndroidRuntime(1917): at java.lang.reflect.Method.invokeNative(Native Method)
12-23 16:41:13.136: E/AndroidRuntime(1917): at java.lang.reflect.Method.invoke(Method.java:511)
12-23 16:41:13.136: E/AndroidRuntime(1917): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-23 16:41:13.136: E/AndroidRuntime(1917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-23 16:41:13.136: E/AndroidRuntime(1917): at dalvik.system.NativeStart.main(Native Method)
12-23 16:41:13.136: E/AndroidRuntime(1917): Caused by: java.lang.NullPointerException
12-23 16:41:13.136: E/AndroidRuntime(1917): at com.example.crud.UserDAO.insertUser(UserDAO.java:45)
12-23 16:41:13.136: E/AndroidRuntime(1917): at com.example.crud.MainActivity.onCreate(MainActivity.java:19)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.Activity.performCreate(Activity.java:5104)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-23 16:41:13.136: E/AndroidRuntime(1917): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-23 16:41:13.136: E/AndroidRuntime(1917): ... 11 more |
je suis débutant sur android et je n'arrive pas à reconnaitre la source de l'erreur.Merci infiniment de votre aide