Java 程序不工作(无任何错误/警告)
我不明白为什么程序没有响应。我在系统上等待了2-3分钟,系统显示: 程序没有响应。你想关门吗 这是我的密码 主要活动Java 程序不工作(无任何错误/警告),java,android,Java,Android,我不明白为什么程序没有响应。我在系统上等待了2-3分钟,系统显示: 程序没有响应。你想关门吗 这是我的密码 主要活动 private ArrayAdapter<String> client_name_arrayAdapter; private ArrayList<String> client_name_arrayList = new ArrayList<>(); private LinkedHashMap<String, Integer> clie
private ArrayAdapter<String> client_name_arrayAdapter;
private ArrayList<String> client_name_arrayList = new ArrayList<>();
private LinkedHashMap<String, Integer> client_name_map = new LinkedHashMap<>();
// onCreate() method
client_name_arrayAdapter = new ArrayAdapter<>(Satish.this, android.R.layout.select_dialog_singlechoice);
client_name = (EditText) findViewById(R.id.client_name);
// set fields only readable
client_name.setFocusableInTouchMode(false);
client_name.setKeyListener(null);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.client_name:
try {
/** clear <code>client_name_map</code> to prevent reassigning the elements */
client_name_map.clear();
client_name_map = kliyentDAO.getClients();
/** clear <code>client_name_arrayList</code> to prevent reassigning the elements */
client_name_arrayList.clear();
client_name_arrayList.addAll(client_name_map.keySet());
/** clear <code>client_name_arrayAdapter</code> to prevent reassigning the elements */
client_name_arrayAdapter.clear();
client_name_arrayAdapter.addAll(client_name_arrayList);
AlertDialog.Builder builder_client_name = new AlertDialog.Builder(Satish.this);
builder_client_name.setTitle("Malı seçin");
if (client_name_arrayAdapter.isEmpty()) {
builder_client_name.setMessage("Heç bir müştəri tapılmadı.");
builder_client_name.setNegativeButton("İmtina", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
} else {
builder_client_name.setSingleChoiceItems(client_name_arrayAdapter, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
_which[0] = which;
id = client_name_map.get(client_name_arrayList.get(which));
}
}).setNegativeButton("İmtina", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setPositiveButton("Seç", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
client_name.setText(client_name_arrayList.get(_which[0]));
dialog.dismiss();
}
});
}
builder_client_name.create().show();
} catch (Exception e) {
// Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
Log.wtf("Unknown bug: ", e.toString());
}
break;
}
}
}
DAO类
public LinkedHashMap<String, Integer> getClients() {
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT idkliy, kliyentad FROM " + TABLE_KLIYENT, null);
cursor.moveToPosition(0);
while (!cursor.isAfterLast()) {
linkedHashMap.put(cursor.getString(cursor.getColumnIndex(COLUMN_KLIYENTAD)), cursor.getInt(cursor.getColumnIndex(COLUMN_IDKLIY)));
}
cursor.close();
return linkedHashMap;
}
如有任何有用的意见/答复,敬请谅解
谢谢:)试试这个:
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT idkliy, kliyentad FROM " + TABLE_KLIYENT, null);
if(cursor.moveToFirst()){
do{
linkedHashMap.put(cursor.getString(cursor.getColumnIndex(COLUMN_KLIYENTAD)), cursor.getInt(cursor.getColumnIndex(COLUMN_IDKLIY)));
}while (cursor.moveToNext());
}
cursor.close();
return linkedHashMap;
请注意: 很可能是您遇到了错误 您需要调整日志cat以在控制台中显示它们
可能您的筛选器没有显示错误。看起来您没有在此循环中推进光标!像这样添加
moveToNext()
:
Cursor cursor = db.rawQuery("SELECT idkliy, kliyentad FROM " + TABLE_KLIYENT, null);
cursor.moveToPosition(0);
while (!cursor.isAfterLast()) {
linkedHashMap.put(cursor.getString(cursor.getColumnIndex(COLUMN_KLIYENTAD)), cursor.getInt(cursor.getColumnIndex(COLUMN_IDKLIY)));
cursor.moveToNext();
}
cursor.close();
在我看来,这就是问题所在 您有以下循环:
while (!cursor.isAfterLast()) {
linkedHashMap.put(...);
}
但是您永远不会实际更改光标的位置,因此它永远不会退出while循环的条件,从而导致挂起线程
因为您是在UI线程上执行此操作的,所以应用程序无法响应Android,因此看起来好像已经崩溃了
放置对象后,尝试添加
cursor.moveToNext()
。移动光标可能是个好主意…添加cursor.moveToNext()代码>在linkedHashMap.put
行之后。。。我会用解决方案更新代码我的天啊。。。我怎么没听到这句话。谢谢几分钟后我会接受你的回答。@Meda,关于你最初的“回答”,请在问题上发表评论,而不是在回答中。你的回答现在是这个问题上最老的,尽管实际答案是最后一个。
while (!cursor.isAfterLast()) {
linkedHashMap.put(...);
}