2017-10-04 108 views
1

我试图建立一个应用程序,设置许多闹钟,我想用SQLite数据库保存报警。已经看过很多教程,但仍然有使用数据库的问题。首先,我想通过按一个按钮来逐一保存闹钟。我也尝试手动插入2个闹钟,但它也没有奏效。我究竟做错了什么?我对此很新!在Android应用程序的Sqlite错误

DBHelper类

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

类报警:

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

活动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); 
     } 
    }); 


} 

错误在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

你可以发布错误堆栈跟踪吗? +它从哪里抛出? –

+0

我能找到的所有错误都在android监视器上。 (只是更新了问题)。不知道我是否回答你的问题。请再次检查 –

+0

您发布的stacktrace显示没有错误的sqlite。你有一个服务的问题在这里看看:https://stackoverflow.com/questions/10468685/service-has-leaked-intentreceiver-in-android – user2319066

回答

1

加入的onCreate AddAlarm.java的下列():

dbHelper=new DBHelper(this); 

也能看到错误日志中的logcat加入try-catch块如下:

ex.printStackTrace(); 

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

     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

非常感谢你.. –