【问题标题】:Sqlite Error On Android ApplicationAndroid应用程序上的Sqlite错误
【发布时间】:2017-10-04 15:00:29
【问题描述】:

我正在尝试构建一个设置许多闹钟的应用程序,并且我想使用 SQLite 数据库保存闹钟。已经为此观看了许多教程,但在使用数据库时仍然遇到问题。首先,我想通过按一个按钮来一一保存警报。我也尝试手动插入 2 个警报,但也没有用。我究竟做错了什么?我对此很陌生!

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

活动添加警报

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

}

主活动:

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 csk@8709fba that was originally bound here
                                                                  android.app.ServiceConnectionLeaked: Service com.google.android.gms.chimera.GmsIntentOperationService has leaked ServiceConnection csk@8709fba 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)

【问题讨论】:

  • 你能发布错误堆栈跟踪吗? + 它是从哪里扔的?
  • 我能找到的所有错误都在安卓监视器上。 (刚刚更新了问题)。不确定我是否回答了你的问题。请再次检查
  • 您发布的堆栈跟踪显示 sqlite 没有错误。你有问题看这里的服务:stackoverflow.com/questions/10468685/…
  • 看看how to debug with android studio,通过调试,您可以找到引发错误的行,通过搜索有关错误的一些信息,您可能会找到解决方案。
  • 问题是,当我单击 AddAlarm Activity 上的按钮时,它必须将警报添加到数据库。而不是这个我得到消息“错误”,这意味着它去捕获操作。

标签: java android sqlite android-sqlite


【解决方案1】:

在 AddAlarm.java 的 onCreate() 中添加以下内容:

dbHelper=new DBHelper(this);

还可以在 logcat 中查看错误日志,在 try-catch 块中添加以下内容:

ex.printStackTrace();

添加警报活动:

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

    }
}

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2013-07-11
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多