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