Java 程序不工作(无任何错误/警告)

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

我不明白为什么程序没有响应。我在系统上等待了2-3分钟,系统显示:

程序没有响应。你想关门吗

这是我的密码

主要活动

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(...);
}