Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Sqlite数据库在内部插入查询问题';试试catch';块_Android_Sqlite_Try Catch_Android Debugging - Fatal编程技术网

Android Sqlite数据库在内部插入查询问题';试试catch';块

Android Sqlite数据库在内部插入查询问题';试试catch';块,android,sqlite,try-catch,android-debugging,Android,Sqlite,Try Catch,Android Debugging,我正在开发一个应用程序(需要人的位置)来存储用户的位置坐标,我创建了三个字段,即1)键坐标ID,2)键纬度,3)键经度 插入代码在“try”和“catch”中。成功插入后,“try”部分返回true,而“catch”部分返回false 我面临的问题是,在调试时,“try”和“catch”这两部分代码都被执行。而且,当我查看表(在SD卡上创建了数据库备份)时,只有一些消费者的重复条目。 我的问题是,如果插入查询成功,为什么要执行“catch”部分中的代码? public class sqldata

我正在开发一个应用程序(需要人的位置)来存储用户的位置坐标,我创建了三个字段,即1)键坐标ID,2)键纬度,3)键经度

插入代码在“try”和“catch”中。成功插入后,“try”部分返回true,而“catch”部分返回false

我面临的问题是,在调试时,“try”和“catch”这两部分代码都被执行。而且,当我查看表(在SD卡上创建了数据库备份)时,只有一些消费者的重复条目。 我的问题是,如果插入查询成功,为什么要执行“catch”部分中的代码?

public class sqldataclass{
public static final String key_Con_ID="Con_ID";
public static final String key_Latitude="Latitude";
public static final String key_Longitude = "Longitude";

private static final String DATABASE_TABLE11 = "Gps_Data";
private static final int DATABASE_VERSION = 1;
private static final String DEBUG_TAG = null;

private DbHelper OurHelper;
private final Context OurContext;
private SQLiteDatabase OurDatabase;
private static class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_GPS_DATA = "CREATE TABLE " + DATABASE_TABLE11 + " ( "
                + key_Con_ID + " varchar ,"
                + key_Latitude + " double ,"
                + key_Longitude + " double )";
        try
          {db.execSQL(CREATE_GPS_DATA);}
          catch(SQLException e){e.printStackTrace();}
}
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXIST" + DATABASE_NAME);
        onCreate(db);
    }
    public sqldataclass(Context c) {
    OurContext = c;
}

public sqldataclass open() throws SQLException

{
    OurHelper = new DbHelper(OurContext);
    OurDatabase = OurHelper.getWritableDatabase();
    return this;
}
    public void close() {
    OurHelper.close();
}
public boolean insertGpsCords(String consid,double lat,double longi)
{
    open();
    try {
        ContentValues values = new ContentValues();

        values.put(sqldataclass.key_Con_ID, consid);
        values.put(sqldataclass.key_Latitude, lat);
        values.put(sqldataclass.key_Longitude, longi);

        String query1 = "Select " + key_Con_ID + " from " + DATABASE_TABLE11 + " where " + key_Con_ID + " = '" + consid + "'";

        Cursor c1 = OurDatabase.rawQuery(query1, null);
        int getRecordCount = c1.getCount();
        if (getRecordCount == 0) {
            OurDatabase.insert(DATABASE_TABLE11, null, values);
        } else {
                OurDatabase.update(DATABASE_TABLE11, values, null, null);
        }
        close();
        return true;
    }
    catch (Exception e) {
        return false;
    }
}
单击活动中的按钮即可调用insertGpsCords函数。位置通过服务获取。 代码部分如下所示:-

b1= (Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (s!=null){

                ArrayList<Double> loc = new ArrayList<Double>();

                if (s.getCoordinates().size()!=0) {
                    loc.clear();
                    loc.addAll(s.getCoordinates());

                    Double l = loc.get(0);
                    Double g = loc.get(1);
                    Toast.makeText
                            (Bill_meter_status_faulty.this, "latitude: " + l + "longitude: " + g, Toast.LENGTH_SHORT)
                            .show();
                    sqldataclass sdc = new sqldataclass(Bill_meter_status_faulty.this);
                    sdc.insertGpsCords(consId, l, g);
                }
                else{
                    Toast.makeText(Bill_meter_status_faulty.this,"cannot access location",Toast.LENGTH_SHORT).show();
                }

            }
b1=(按钮)findviewbyd(R.id.b1);
b1.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(s!=null){
ArrayList loc=新的ArrayList();
如果(s.getCoordinates().size()!=0){
loc.clear();
loc.addAll(s.getCoordinates());
双l=loc.get(0);
双g=loc.get(1);
Toast.makeText
(比尔·米·状态·这个“纬度:+l+”经度:+g,土司,长度·短)
.show();
sqldataclass sdc=新的sqldataclass(账单\仪表\状态\故障。这是);
sdc.insertGpsCords(consId,l,g);
}
否则{
Toast.makeText(Bill\u meter\u status\u故障。此“无法访问位置”,Toast.LENGTH\u SHORT.show();
}
}

获取位置没有问题。

在catch块中,打印错误日志并在此处共享。当您说try和catch块都在执行时,您的意思是返回true和false吗?看起来您并不是在检查
insertGpsCords
的返回。@Amani Kilumanga是的,它首先返回true,然后返回returns false..但我仍然可以查看插入的数据..看起来很奇怪,这可能是由于某些原因触发了两次单击侦听器造成的。实际上,您应该做的是打印异常并跟踪原因。未打印catch块中的错误日志(看起来catch块中的代码没有被执行,但它仍然会转到catch块中的调试点。