android.la base de données.sqlite.SQLiteConstraintException: contrainte not NULL a échoué: albums.chemin d'accès du code (1299)
Une exception qui s'est passé dans mon application une fois que j'ajoute un nouvel élément dans ma base de données.
Error inserting time=2016年05月14日 23:42:03 content=zxdc
android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: albums.path (code 1299)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:780)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
at com.driver.shinekaye.olddriver.AddContent.addDB(AddContent.java:53)
at com.driver.shinekaye.olddriver.AddContent.onClick(AddContent.java:70)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Mon adaptateur:
public class MyAdapter extends BaseAdapter {
private Context context;
private Cursor cursor;
private LinearLayout layout;
public MyAdapter(Context context, Cursor cursor) {
this.context = context;
this.cursor = cursor;
}
@Override
public int getCount() {
return cursor.getCount();
}
@Override
public Object getItem(int position) {
return cursor.getPosition();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
layout = (LinearLayout) inflater.inflate(R.layout.activity_secretalbum_item, null);
TextView contentTv = (TextView) layout.findViewById(R.id.list_content);
TextView timeTv = (TextView) layout.findViewById(R.id.list_time);
ImageView imgIv = (ImageView) layout.findViewById(R.id.list_img);
ImageView videoIv = (ImageView) layout.findViewById(R.id.list_video);
cursor.moveToPosition(position);
String content = cursor.getString(cursor.getColumnIndex("content"));
String time = cursor.getString(cursor.getColumnIndex("time"));
contentTv.setText(content);
timeTv.setText(time);
return layout;
}
}
La table:
public class SecretAlbumDB extends SQLiteOpenHelper {
public static final String TABLE_NAME = "albums";
public static final String CONTENT = "content";
public static final String PATH = "path";
public static final String VIDEO = "video";
public static final String ID = "_id";
public static final String TIME = "time";
public SecretAlbumDB(Context context) {
super(context, "albums", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
+ " TEXT NOT NULL," + PATH
+ " TEXT NOT NULL," + VIDEO
+ " TEXT NOT NULL," + TIME
+ " TEXT NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
La requête
public void selectDB() {
Cursor cursor = dbReader.query(SecretAlbumDB.TABLE_NAME, null, null, null, null, null, null);
adapter = new MyAdapter(this, cursor);
list.setAdapter(adapter);
L'insert:
private void addDB() {
ContentValues cv = new ContentValues();
cv.put(SecretAlbumDB.CONTENT, editText.getText().toString());
cv.put(SecretAlbumDB.TIME, getTime());
dbWriter.insert(SecretAlbumDB.TABLE_NAME, null, cv);
}
Quelqu'un pourrait-il m'aider?
OriginalL'auteur Kaye Shine | 2016-05-15
Vous devez vous connecter pour publier un commentaire.
Vous avez PAS les valeurs NULL dans votre base de données définition:
Mais dans votre addDB vous seulement de mettre du CONTENU et de TEMPS en ContentValues donc certainement à la recherche pour le CHEMIN d'accès et la VIDÉO. Si ils ne sont pas présents, il va donner à l'erreur. Il y a deux solution:
Solution 1:
supprimer la contrainte de NON nullité de la VIDÉO et le CHEMIN d'accès:
Solution 2:
ajouter de la VIDÉO et le CHEMIN d'accès à ContentValues:
ok bonne chance, veuillez cocher la réponse acceptée si la question peut être fermé
La Question ne sera pas fermé après l'acceptation de la réponse ! Ne vous inquiétez pas.
eh bien, je voulais dire qu'il n'apparaîtra pas sur la première page de la liste. J'ai effectivement rencontré beaucoup de questions pas marqué comme réponse, mais que vous trouvez dans les commentaires que la réponse est OK et vous devez passer par beaucoup de difficulté à lire les questions et les réponses. Cela aidera les autres utilisateurs à faire don de leur temps sur des questions sans réponse
Oui, vous avez raison.. 1 pour votre pensée ! bien que ses 16 min. une fin que le mien..
OriginalL'auteur Pooya
Pour vous que vous avez déclaré votre tous les champs (colonnes)
NOT NULL
et vous n'avez pas mis la valeur de ces champs lors de l'insertion d'cv
. Soit faire de ces colonnesnull
acceptable ou de mettre toutes les valeurs decv
pour toutes les Colonnes qui sontNOT NULL
.Vous êtes les bienvenus !
OriginalL'auteur Shree Krishna