Hashmap值未附加到Alertdialog

时间:2015-01-13 11:17:17

标签: android hashmap alertdialog

我在一个使用hashmap排序的arraylist中有一个callog(显示在一个警告对话框中),每当我尝试查看这个callog时它只显示calllog查询的结果但是在我的logcat中它显示了数字正确排序。请问如何将此结果附加到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());



        }
    }

1 个答案:

答案 0 :(得分:0)

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

首先,你不能&#34;排序&#34;使用HashMap的任何内容。这两个概念是互斥的。

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

接下来,您在setCursor()上呼叫AlertDialog.Builder并传递Cursor。对话框构建器正在使用此Cursor中的数据来构建要在对话框中显示的内容。你有&#34;排序&#34;数据是无关紧要的,因为您已经为对话框构建器提供了原始查询中的数据。

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

如果您真的想要数据&#34;已排序&#34;,您只需添加&#34;按&#34;您查询的子句。

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