2017-10-04 2 views
1

En essayant de construire une application qui définit de nombreuses alarmes et je veux enregistrer les alarmes avec une base de données SQLite. Déjà regardé de nombreux tutoriels pour cela, mais ayant toujours un problème en utilisant la base de données. Tout d'abord, je veux enregistrer l'alarme un par un en appuyant sur un bouton. J'ai aussi essayé d'insérer manuellement 2 alarmes mais ça n'a pas marché non plus. Qu'est-ce que je fais mal? Je suis assez nouveau pour ça!Erreur Sqlite sur l'application Android

DBHelper Classe

public class DBHelper extends SQLiteOpenHelper { 

public static final String DATABASE_NAME = "MyDBName.db"; 
public static final String ALARMS_TABLE_NAME = "alarms"; 
public static final String ALARMS_COLUMN_ID = "id"; 
public static final String ALARMS_COLUMN_HOUR = "hour"; 
public static final String ALARMS_COLUMN_MINUTES = "minutes"; 


public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, 33); 
} 

public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 

    db.execSQL("CREATE TABLE "+ALARMS_TABLE_NAME+" ("+ALARMS_COLUMN_ID+ " INTEGER PRIMARY KEY , "+ 
      ALARMS_COLUMN_HOUR+ " INTEGER, "+ALARMS_COLUMN_MINUTES+" INTEGER)"); 

    InsertAlarms(db); 
} 

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

    db.execSQL("DROP TABLE IF EXISTS "+ALARMS_TABLE_NAME); 

    onCreate(db); 
} 

void AddAlarm(Alarm alarm) 
{ 
    SQLiteDatabase db= this.getWritableDatabase(); 

    ContentValues cv=new ContentValues(); 

    cv.put(ALARMS_COLUMN_HOUR, alarm.getHour()); 
    cv.put(ALARMS_COLUMN_MINUTES, alarm.getMinutes()); 

    db.insert(ALARMS_TABLE_NAME, null, cv); 
    db.close(); 
} 

Cursor getAllAlarms() 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 

    Cursor cur= db.rawQuery("SELECT * FROM "+ALARMS_TABLE_NAME,null); 
    return cur; 

} 

void InsertAlarms(SQLiteDatabase db) //insert manually 2 alarms 
{ 
    ContentValues cv=new ContentValues(); 
    cv.put(ALARMS_COLUMN_ID, 1); 
    cv.put(ALARMS_COLUMN_HOUR, 20); 
    cv.put(ALARMS_COLUMN_MINUTES, 20); 
    db.insert(ALARMS_TABLE_NAME, null, cv); 

    cv.put(ALARMS_COLUMN_ID, 2); 
    cv.put(ALARMS_COLUMN_HOUR, 20); 
    cv.put(ALARMS_COLUMN_MINUTES, 20); 
    db.insert(ALARMS_TABLE_NAME, null, cv); 

} 

int getAlarmCount() 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    Cursor cur= db.rawQuery("Select * from "+ALARMS_TABLE_NAME, null); 
    int x= cur.getCount(); 
    cur.close(); 
    return x; 
} 

Classe d'alarme:

public class Alarm { 
int _id; 
int _hour; 
int _minutes; 

public Alarm(int Hour, int Minutes) 
{ 
    this._hour=Hour; 
    this._minutes=Minutes; 
} 

public int getID() 
{ 
    return this._id; 
} 
public void SetID(int ID) 
{ 
    this._id=ID; 
} 
public int getHour() 
{ 
    return this._hour; 
} 
public int getMinutes() 
{ 
    return this._minutes; 
} 

public void setHour(int Hour) 
{ 
    this._hour=Hour; 
} 

public void setMinutes(int Minutes) 
{ 
    this._minutes=Minutes; 
} 

Activité AddAlarm

public class AddAlarm extends Activity { 

EditText txtHour; 
EditText txtMinutes; 

DBHelper dbHelper; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_addalarm); 

    txtHour=(EditText)findViewById(R.id.txtHour); 
    txtMinutes=(EditText)findViewById(R.id.txtMinutes); 

    Button button1 = (Button)findViewById(R.id.addalarmbtn); 

    button1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v){ 
      btnAddAlarm_Click(v); 
     } 
    }); 

} 

public void btnAddAlarm_Click(View view) 
{ 
    boolean ok=true; 
    try 
    { 

     int hour=Integer.parseInt(txtHour.getText().toString()); 
     int minutes=Integer.parseInt(txtMinutes.getText().toString()); 

     Alarm al=new Alarm(hour,minutes); 
     Toast.makeText(AddAlarm.this,"ADDED! ", Toast.LENGTH_LONG).show(); 
     dbHelper.AddAlarm(al); 


    } 
    catch(Exception ex) 
    { 
     Toast.makeText(AddAlarm.this,"ERROR! ", Toast.LENGTH_LONG).show(); 
    } 

} 

MainActivity:

public class MainActivity extends AppCompatActivity { 

Intent intent=getIntent(); 
DBHelper mydb; 
TextView xupnitiria; 
String hour; 
public static boolean flag = false; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button = (Button)findViewById(R.id.set_alarm_button); 

    //Bundle extras=intent.getExtras(); 
    mydb=new DBHelper(this); 

    xupnitiria =(TextView)findViewById(R.id.xupnitiria); 

    xupnitiria.setText(xupnitiria.getText()+String.valueOf(mydb.getAlarmCount())); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v){ 
      Intent a= new Intent(MainActivity.this, AddAlarm.class); 
      startActivity(a); 
     } 
    }); 


} 

Erreurs sur le moniteur android

10-04 15:07:26.592 2625-2625/com.google.android.gms E/ActivityThread: Service com.google.android.gms.chimera.GmsIntentOperationService has leaked ServiceConnection [email protected] that was originally bound here 
                    android.app.ServiceConnectionLeaked: Service com.google.android.gms.chimera.GmsIntentOperationService has leaked ServiceConnection [email protected] that was originally bound here 
                     at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1336) 
                     at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:1231) 
                     at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1450) 
                     at android.app.ContextImpl.bindService(ContextImpl.java:1422) 
                     at android.content.ContextWrapper.bindService(ContextWrapper.java:636) 
                     at android.content.ContextWrapper.bindService(ContextWrapper.java:636) 
                     at android.content.ContextWrapper.bindService(ContextWrapper.java:636) 
                     at android.content.ContextWrapper.bindService(ContextWrapper.java:636) 
                     at com.google.android.gms.chimera.container.zapp.ZappLogOperation.onHandleIntent(:com.google.android.gms:0) 
                     at com.google.android.chimera.IntentOperation.onHandleIntent(:com.google.android.gms:1) 
                     at bvq.run(:com.google.android.gms:9) 
                     at bvn.run(:com.google.android.gms:10) 
                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                     at java.lang.Thread.run(Thread.java:761) 
+0

Pouvez-vous publier la trace de la pile d'erreurs? + D'où vient-il? –

+0

Toutes les erreurs que j'ai pu trouver sont sur le moniteur android. (juste mis à jour la question). Je ne sais pas si j'ai répondu à votre question. Veuillez vérifier à nouveau –

+0

La pile que vous avez affichée ne montre aucune erreur pour sqlite. Vous avez un problème avec un service regardez ici: https://stackoverflow.com/questions/10468685/service-has-leaked-intentreceiver-in-android – user2319066

Répondre

1

Ajouter suivante dans onCreate() de AddAlarm.java:

dbHelper=new DBHelper(this); 

également voir le journal des erreurs dans logcat ajoutez ce qui suit dans le bloc try-catch:

ex.printStackTrace(); 

AddAlarm Activité:

public class AddAlarm extends Activity { 

    EditText txtHour; 
    EditText txtMinutes; 

    DBHelper dbHelper; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_addalarm); 

     txtHour = (EditText) findViewById(R.id.txtHour); 
     txtMinutes = (EditText) findViewById(R.id.txtMinutes); 

     dbHelper=new DBHelper(this); 

     Button button1 = (Button) findViewById(R.id.addalarmbtn); 

     button1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       btnAddAlarm_Click(v); 
      } 
     }); 

    } 

    public void btnAddAlarm_Click(View view) { 
     boolean ok = true; 
     try { 

      int hour = Integer.parseInt(txtHour.getText().toString()); 
      int minutes = Integer.parseInt(txtMinutes.getText().toString()); 

      Alarm al = new Alarm(hour, minutes); 
      Toast.makeText(AddAlarm.this, "ADDED! ", Toast.LENGTH_LONG).show(); 
      dbHelper.AddAlarm(al); 


     } catch (Exception ex) { 
      Toast.makeText(AddAlarm.this, "ERROR! ", Toast.LENGTH_LONG).show(); 
      ex.printStackTrace(); 
     } 

    } 
} 
+0

Merci beaucoup .. –