2017-10-04 2 views
1

Ich versuche, eine App zu bauen, die viele Wecker setzt, und ich möchte die Alarme mit einer SQLite-Datenbank speichern. Habe schon viele Tutorials dafür angeschaut aber immer noch ein Problem mit der Datenbank. Zuerst möchte ich den Alarm auf Knopfdruck speichern. Ich habe auch versucht, 2 Alarme manuell einzugeben, aber es hat auch nicht funktioniert. Was mache ich falsch? Ich bin ziemlich neu dazu!Sqlite Fehler auf Android-Anwendung

DBHelper Klasse

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; 
} 

Klasse Alarm:

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; 
} 

Aktivität 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); 
     } 
    }); 


} 
Folgende

Fehler auf Android-Monitor

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

Können Sie den Fehler-Stack-Trace veröffentlichen? + Woher wird es geworfen? –

+0

Alle Fehler, die ich finden konnte, sind auf Android-Monitor. (habe gerade die Frage aktualisiert). Nicht sicher, ob ich auf deine Frage geantwortet habe. Bitte überprüfen Sie erneut –

+0

Der StackTrace, den Sie gepostet haben, zeigt keinen Fehler für SQLite. Sie haben ein Problem mit einem Service schauen Sie hier: https://stackoverflow.com/questions/10468685/service-has-leaked-ntentreceiver-in-android – user2319066

Antwort

1

Add in onCreate() von AddAlarm.java:

ex.printStackTrace(); 
:

dbHelper=new DBHelper(this); 

Auch Fehlerprotokoll in logcat fügen folgende in Try-Catch-Block zu sehen

AddAlarm Aktivität:

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

Vielen Dank .. –