哈希映射值未追加到警报对话框



我在使用哈希图排序的数组列表中有一个 callog(显示在警报对话框中),每当我尝试查看此 callog 时,它只显示调用日志查询的结果,但在我的 logcat 中它显示了正确排序的数字。请问如何将日志猫中的此结果附加到警报对话框中?我已经与它斗争了好几天,我似乎无法弄清楚。

final List<String> allNumbers = new ArrayList<String>();
public void onClick(View v) {
            String[] strFields = { android.provider.CallLog.Calls._ID,
                    android.provider.CallLog.Calls.NUMBER,
                    android.provider.CallLog.Calls.CACHED_NAME,  }; 
            String strOrder = android.provider.CallLog.Calls.DATE + " DESC LIMIT 10   ";                  

        final Cursor cursorCall = EmergencyButtonActivity.this.getContentResolver().query(
                    android.provider.CallLog.Calls.CONTENT_URI, strFields,
                    null, null, strOrder);
                  this.sortNumber();

        while (cursorCall.moveToNext()){
            String names = cursorCall.getString(cursorCall.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
             allNumbers.add(names)
                    }
AlertDialog.Builder builder = new AlertDialog.Builder(EmergencyButtonActivity.this);
                builder.setTitle("Frequent Contacts");
                android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialogInterface, int item) {
                        cursorCall.moveToPosition(item);
                         EditText phoneInput = (EditText) findViewById(R.id.txtPhoneNo);
                        String selectedNumber =cursorCall.getString(cursorCall.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                        selectedNumber = selectedNumber.replace("-", "");
                        phoneInput.setText(selectedNumber);
                        Toast.makeText(EmergencyButtonActivity.this, cursorCall.getString(cursorCall.getColumnIndex(android.provider.CallLog.Calls.NUMBER)),
                                Toast.LENGTH_LONG).show();
                        cursorCall.close();   
                    }

                };
                builder.setCursor(cursorCall, listener, android.provider.CallLog.Calls.CACHED_NAME);
                builder.create().show();   
                    }


        public void sortNumber() {
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String temp : allNumbers) {
            Integer count = map.get(temp);
            map.put(temp, (count == null) ? 1 : count + 1);
        }
        printMap(map);

    }   
        public static void printMap(Map<String, Integer> map){
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println( entry.getKey() + entry.getValue());

        }
    }
这有很多

错误,很难知道从哪里开始:-(

首先,您不能使用HashMap"排序"任何内容。这两个概念是相互排斥的。

其次,您有一个while循环,您可以在其中为光标中的每一行创建和显示AlertDialog。这不可能是对的。

接下来,您将在AlertDialog.Builder上调用setCursor()并通过Cursor。对话框构建器使用此Cursor中的数据来构建要在对话框中显示的内容。您对数据进行"排序"这一事实无关紧要,因为您已向对话框构建器提供了原始查询中的数据。

接下来,您的方法sortNumber()创建一个HashMap并填充它,但此HashMap是此方法的局部变量,因此在方法返回后,HashMap消失。您不会从该方法返回HashMap,也不会将其存储在任何位置。

如果您确实希望数据"排序",则只需在查询中添加"排序依据"子句即可。

您可能需要考虑从 sortNumber() 方法返回HashMap,然后从中构建一个String数组,然后在对话框构建器上调用 setItems(),而不是使用 setCursor()

最新更新