2017-08-19 1 views
0

Ceci est le code pour obtenir la table RECORD du SQLiteDatebase. Dans le try block quelque chose ne va pas et il jette toujours le SQLiteException. Tout ce que j'essaie de faire ici est de convertir chaque ligne de la table "RECORD" en une chaîne et l'ajouter à un ArrayList, ensuite connecter le tableau au ArrayAdapter, et enfin utiliser ListView pour afficher le tableau.Android SQLiteException. Pourquoi cela arrive-t-il?

package com.example.tommy.stop_watch_real; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.CursorAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class RecordList extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_record_list); 
     ListView temp = (ListView) findViewById(R.id.recordList); 
     ArrayList<String> arrayList = new ArrayList<String>(); 
     ArrayAdapter<String> adapter; 

     **try { 
      SQLiteOpenHelper dataBaseHelper = new DataBaseHelper(this); 
      SQLiteDatabase db = dataBaseHelper.getReadableDatabase(); 
      Cursor cursor = db.query("RECORD", new String[] {"_id, DATE, MINUTES"}, null, null,null,null,null); 
      while (cursor.moveToFirst()){ 
       String id = Integer.toString(cursor.getInt(0)); 
       String date = cursor.getString(1); 
       String minutes = Integer.toString(cursor.getInt(2)); 
       String finalValue = id + "|" + date + "|" + minutes; 
       arrayList.add(finalValue); 
      } 
      adapter=new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, 
        arrayList); 
      temp.setAdapter(adapter); 
      cursor.close(); 
      db.close();}** 
      catch (SQLiteException e) { 
       Toast.makeText(RecordList.this, "Database not available", Toast.LENGTH_LONG).show(); 
     } 

    } 
} 

Voici le code pour mon datebaseHelper:

class DataBaseHelper extends SQLiteOpenHelper { 
    private static final String DB_NAME = "Record"; // name of the database 
    private static final int DB_VERSION = 1; //Version 

    DataBaseHelper (Context context){ 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE RECORD (" 
       + "_id INTEGER PRIMARY KEY AUTOINCERMENT, " 
       + "DATE STRING," //careful 
       + "MINUTES INTEGER" + ");" 
     ); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    //no need to worry about this yet. 
    } 
} 

Le toast montre toujours, ce qui signifie quelque chose ne va pas dans le try block. Je viens de commencer le développement Android il y a une semaine et je ne sais pas ce qui s'est mal passé dans mon code. Ce serait génial si vous pouviez me donner une direction.

Merci à l'avance.

+4

No 1: lire le message exception –

+1

après stacktrace –

+2

Dans votre La classe 'DBHelper' Date a le type ** STRING **? Comment ça? Vérifiez cela: https: //dev.mysql.com/doc/refman/5.7/en/string-types.html – Mandy8055

Répondre

1

Cette partie me semble erronée.

while (cursor.moveToFirst()){ 
      String id = Integer.toString(cursor.getInt(0)); 
      String date = cursor.getString(1); 
      String minutes = Integer.toString(cursor.getInt(2)); 
      String finalValue = id + "|" + date + "|" + minutes; 
      arrayList.add(finalValue); 
     } 

Je ne sais pas ce que vous essayez d'atteindre, mais la bonne façon d'obtenir des données de la base de données est comme ceci:

direction
cursor.moveToFirst() 
while (cursor.isAfterLast()){ 
      String id = Integer.toString(cursor.getInt(0)); 
      String date = cursor.getString(1); 
      String minutes = Integer.toString(cursor.getInt(2)); 
      String finalValue = id + "|" + date + "|" + minutes; 
      arrayList.add(finalValue); 
     } 
+0

Ahh !!!! J'essaie de lire tous les enregistrements et de convertir chaque ligne en une chaîne. J'aurais dû d'abord utiliser moveToFirst puis while (moveToNext). Merci beaucoup :). Cela fonctionne enfin maintenant. –

+0

heureux d'aider :) merci. –