在android中插入条件内的对话框

在android中插入条件内的对话框,android,sql-server,if-statement,dialog,Android,Sql Server,If Statement,Dialog,我创建了一个将数据插入sql server的应用程序。连接到服务器时没有问题。但当用户输入已经插入数据库的相同数据时,我想使用一个对话框。但我不知道为什么它不起作用 我的代码在这里 public void insert(){ final String fname=name.getText().toString(); final String fcity=city.getText().toString(); ResultSe

我创建了一个将数据插入sql server的应用程序。连接到服务器时没有问题。但当用户输入已经插入数据库的相同数据时,我想使用一个对话框。但我不知道为什么它不起作用

我的代码在这里

public void insert(){
            final String fname=name.getText().toString();
            final String fcity=city.getText().toString();
             ResultSet rs;
             try{
             Statement statement1=connect.createStatement();
             rs=statement1.executeQuery("SELECT * FROM FORM1");
             List<Map<String,String>>data1=null;
             data1=new ArrayList<Map<String,String>>();

             while(rs.next()){
                 Map<String,String>datanum1=new HashMap<String,String>();
                 datanum1.put("a", rs.getString("NAME"));
                 datanum1.put("b", rs.getString("CITY"));
                 data1.add(datanum1);
             }
             if(data1.contains(fname)!=false){
                 AlertDialog.Builder adb=new AlertDialog.Builder(context);
                 adb.setTitle("My Records");
                 adb.setMessage(fname+" Already exist... do u want to overwrite???");
                 adb.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        try{
                         Statement statement2=connect.createStatement();
                        statement2.executeUpdate("UPDATE FORM1 SET NAME='"+fname+"',CITY='"+fcity+"' WHERE NAME='fname'");
                        }catch(Exception e){
                            Log.e("ERROR", e.getMessage());
                        }

                    }
                });
                 adb.setNegativeButton("No", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                });
                 AlertDialog adbc=adb.create();
                 adbc.show();
             }
             else{
                 Statement statement3=connect.createStatement();
                 statement3.executeUpdate("INSERT INTO FORM1(NAME,CITY) VALUES('"+name.getText().toString()+"','"+city.getText().toString()+"')");
             }

             }catch(Exception e){
                Log.e("ERROR", e.getMessage()); 
             }
         }
public void insert(){
最后一个字符串fname=name.getText().toString();
最后一个字符串fcity=city.getText().toString();
结果集rs;
试一试{
语句statement1=connect.createStatement();
rs=语句1.executeQuery(“从表单1中选择*);
Listdata1=null;
data1=新的ArrayList();
while(rs.next()){
Mapdatanum1=新HashMap();
datanum1.put(“a”,rs.getString(“NAME”);
datanum1.put(“b”,rs.getString(“CITY”);
data1.add(datanum1);
}
if(data1.contains(fname)!=false){
AlertDialog.Builder adb=新建AlertDialog.Builder(上下文);
adb.setTitle(“我的记录”);
adb.setMessage(fname+“已存在…是否要覆盖?”);
adb.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
试一试{
语句statement2=connect.createStatement();
语句2.executeUpdate(“更新FORM1集合名称=”“+fname+”,城市=”“+fcity+”,其中名称=”;
}捕获(例外e){
Log.e(“ERROR”,e.getMessage());
}
}
});
adb.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
}
});
AlertDialog adbc=adb.create();
adbc.show();
}
否则{
语句statement3=connect.createStatement();
语句3.executeUpdate(“插入FORM1(名称、城市)值(“+NAME.getText().toString()+”,“+CITY.getText().toString()+”)”;
}
}捕获(例外e){
Log.e(“ERROR”,e.getMessage());
}
}

如果有任何人,请告诉我我犯了什么错误,以及使用了什么正确的代码……

确保您仅在UI线程中显示对话框。如果不是从ui线程调用,只需使用runOnUiThread(..)方法,如下所示:

-----
您是从UI线程执行此插入操作吗?是的……通过按钮执行此插入操作,您认为它不工作是什么意思?你到底面临什么问题?也。将
if(data1.contains(fname)!=false)
修改为
if(data1.contains(fname))
…如果再次输入相同的数据,可读性会更好..它不会显示任何对话框..解释您在运行代码时期望的内容和实际发生的情况我只想在编辑文本中输入名称并单击“保存”按钮时,如果数据库中已存在名称,则应打开一个对话框。但该对话框未显示…这就是问题所在。我建议您调试代码,以查看控件是否位于if条件中,如果(data1.contains(fname)!=false){..在那里放一个断点,看看它是否会出现..然后执行单步执行,并尝试找出问题在哪里,如果使用if(data1.contains(fname))仍然出现相同的结果
if(data1.contains(fname)!=false){

 runOnUiThread(new Runnable() {

            @Override
            public void run() {

                 AlertDialog.Builder adb=new AlertDialog.Builder(context);
                 adb.setTitle("My Records");
                 adb.setMessage(fname+" Already exist... do u want to overwrite???");
                 adb.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        try{
                         Statement statement2=connect.createStatement();
                        statement2.executeUpdate("UPDATE FORM1 SET NAME='"+fname+"',CITY='"+fcity+"' WHERE NAME='fname'");
                        }catch(Exception e){
                            Log.e("ERROR", e.getMessage());
                        }

                    }
                });
                 adb.setNegativeButton("No", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                });
                 AlertDialog adbc=adb.create();
                 adbc.show();
    }
        });
         }