Android SQLite数据库执行SQL()时应用程序没有响应

Android SQLite数据库执行SQL()时应用程序没有响应,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我在将值插入SQLite数据库时遇到问题。我没有在监视器(Logcat)中看到错误。当我点击按钮插入数据时,应用程序就冻结了 以下是我打开数据库的方式: newdb = openOrCreateDatabase("Count_DB",MODE_PRIVATE,null); newdb.execSQL("CREATE TABLE IF NOT EXISTS Count(Name VARCHAR(50),Description VARCHAR(200),NoC VARCHAR(1000),Time

我在将值插入SQLite数据库时遇到问题。我没有在监视器(Logcat)中看到错误。当我点击按钮插入数据时,应用程序就冻结了

以下是我打开数据库的方式:

newdb = openOrCreateDatabase("Count_DB",MODE_PRIVATE,null);
newdb.execSQL("CREATE TABLE IF NOT EXISTS Count(Name VARCHAR(50),Description VARCHAR(200),NoC VARCHAR(1000),Time VARCHAR(100));");
下面是我保存数据的
onClick
事件:

cr.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Vibrator n = (Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
                n.vibrate(500);
                DateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
                Date now = Calendar.getInstance().getTime();
                cDT = df.format(now);
                customD = new Dialog(nCounter.this);
                customD.setContentView(R.layout.custom_dialog);
                DisplayMetrics metrics = getResources().getDisplayMetrics();
                int width = metrics.widthPixels;
                //int height = metrics.heightPixels;
                customD.getWindow().setLayout((6 * width)/7, RelativeLayout.LayoutParams.WRAP_CONTENT);
                customD.setTitle("Save Counter");
                Button s = (Button)customD.findViewById(R.id.button);
                s.setText(Integer.toString(x));
                e1 = (EditText)customD.findViewById(R.id.editText);
                e2 = (EditText)customD.findViewById(R.id.editText2);
                save = (Button)customD.findViewById(R.id.button3);
                cancel = (Button)customD.findViewById(R.id.button2);
                save.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View vv) {
                        name = e1.getText().toString();
                        desc = e2.getText().toString();
                        if (!name.equals("") && !desc.equals("")){
                            InsertintoCount();
                            while(true){
                                Snackbar.make(vv, "Countings Saved!", Snackbar.LENGTH_LONG).show();
                            }
                        }
                        else {
                                Toast.makeText(getApplicationContext(), "Please fill in the fields!", Toast.LENGTH_LONG).show();
                        }

                    }
                });
                cancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        customD.dismiss();
                    }
                });
                customD.show();
                return true;
            }
        });
这是
InsertintoCount()
方法:

public boolean InsertintoCount(){
    String sqlc = "INSERT INTO Count VALUES('"+name+"','"+desc+"','"+x+"','"+cDT+"');";
    newdb.execSQL(sqlc);
    while(true){
        return true;
    }
}

我不知道你说的冻结是什么意思,你怎么注意到的?但是,我将做以下更改

save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View vv) {
                    name = e1.getText().toString();
                    desc = e2.getText().toString();
                    if (!name.isEmpty() && !desc.isEmpty()){
                        InsertintoCount();
                    } else {
                        Toast.makeText(getApplicationContext(), "Please fill in the fields!", Toast.LENGTH_LONG).show();
                    }
                }
            });
然后在
InsertingCount()
(还要确保
x
cDT
已初始化):


试试看,告诉我们事情的经过

我不知道你说的冻结是什么意思,你是怎么注意到的?但是,我将做以下更改

save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View vv) {
                    name = e1.getText().toString();
                    desc = e2.getText().toString();
                    if (!name.isEmpty() && !desc.isEmpty()){
                        InsertintoCount();
                    } else {
                        Toast.makeText(getApplicationContext(), "Please fill in the fields!", Toast.LENGTH_LONG).show();
                    }
                }
            });
然后在
InsertingCount()
(还要确保
x
cDT
已初始化):


试试看,告诉我们事情的经过

onClick
事件中运行一个无限循环。毫无疑问,你的应用程序没有响应

删除此while循环:

while(true){
Snackbar.make(vv, "Countings Saved!", Snackbar.LENGTH_LONG).show();
}

onClick
事件中运行着一个无限循环。毫无疑问,你的应用程序没有响应

删除此while循环:

while(true){
Snackbar.make(vv, "Countings Saved!", Snackbar.LENGTH_LONG).show();
}


我不确定您是否可以使用
Count
作为表名。在我使用“countings”之前,问题仍然存在。。。所以我尝试了一个不同的名称…删除所有
,而(true)
。。。如果没有好的理由,千万不要使用可能有害的名称
Count()
是SQL函数的名称。我不确定是否可以使用
Count
作为表名。在使用“countings”之前,问题仍然存在。。。所以我尝试了一个不同的名称…删除所有
,而(true)
。。。如果没有好的理由,千万不要使用可能有害的名称
Count()
是SQL函数的名称。应用程序没有响应,我什么都做不了。它被冻住了。。!我如何“初始化”它??我已经在类启动时声明了这些变量…@Alonnaushad使用我提供的代码并告诉我们它是否有效。它不起作用。。。强制关闭已停止,但未将值添加到数据库…@AlokNaushad这是另一个问题。你说应用程序没有响应,现在它响应了。如果您需要有关插入的帮助,请在stackoverflow上发布另一个问题,或在创建数据库时编辑您的问题,并告诉我们
x
cDT
是什么。我们不是魔术师。应用程序没有响应,我什么都做不了。它被冻住了。。!我如何“初始化”它??我已经在类启动时声明了这些变量…@Alonnaushad使用我提供的代码并告诉我们它是否有效。它不起作用。。。强制关闭已停止,但未将值添加到数据库…@AlokNaushad这是另一个问题。你说应用程序没有响应,现在它响应了。如果您需要有关插入的帮助,请在stackoverflow上发布另一个问题,或在创建数据库时编辑您的问题,并告诉我们
x
cDT
是什么。我们不是魔术师,是的!当我删除while循环时,冻结停止了,但当我检查时,值没有插入到database@AlokNaushad尝试更改您的表名<代码>计数已定义为方法名称。当我更改表名时,当我第一次添加值时,它会被添加,但当我第二次添加值时,它不会显示。。。为什么???@Alonnaushad你如何检查它们是否被插入?我在我的主视图中使用了一个按钮…:mnew.setOnClickListener(new view.OnClickListener(){@Override public void onClick(view v){SQLiteDatabase mydatabase=openOrCreateDatabase(“Count_DB”,MODE_PRIVATE,null);Cursor resultSet=mydatabase.rawQuery(“Select*from Countss”,null);resultSet.moveToFirst();String name=resultSet.getString(0);String desc=resultSet.getString(1);Snackbar.make(v,“name:+name+”desc:+desc,Snackbar.LENGTH_LONG)。show();是的!当我删除while循环时,冻结停止了,但当我检查时,值没有插入到database@AlokNaushad尝试更改表名。
Count
已定义为方法名。当我更改表名时,当我第一次添加值时,它会被添加,但第二次添加值,它没有显示…为什么???@AlokNaushad您如何检查它们是否插入?我在主视图中使用一个按钮…:mnew.setOnClickListener(new view.OnClickListener(){@Override public void onClick(view v){SQLiteDatabase mydatabase=openOrCreateDatabase(“Count_DB”,MODE_PRIVATE,null);Cursor resultSet=mydatabase.rawQuery(“Select*from Countss”,null);resultSet.moveToFirst();String name=resultSet.getString(0);String desc=resultSet.getString(1);Snackbar.make(v,“name:+name+”desc:+desc,Snackbar.LENGTH\u LONG).show();