2015-01-13 112 views
-2

我在使用哈希映射進行排序的ArrayList中有一個callog(顯示在警告對話框中),任何時候當我嘗試查看此callog時,它都只顯示calllog查詢的結果,但是我的logcat顯示了正確排序的數字。請如何將這個結果附加到logcat到警報對話框?我一直在與它鬥爭好幾天,我似乎無法弄清楚。未添加到Alertdialog的哈希值映射

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



     } 
    } 

回答

0

有這麼多毛病這是很難知道從哪裏開始:-(

首先,你不能「之類的」任何使用HashMap。這兩個概念是互斥的。

其次,你有一個while環要在其中創建並顯示一個AlertDialog在光標的每一行,這不可能是正確的。

接下來,你在呼喚setCursor()AlertDialog.Builder並通過Cursor。對話框構建器正在使用此Cursor中的數據來構建要在對話框中顯示的內容。您已對數據進行「排序」這一事實是無關緊要的,因爲您已使用對話框構建器查看原始查詢中的數據。

接下來,你的方法sortNumber()創建HashMap和填充它,但這HashMap是一個局部變量,以這種方法,因此該方法返回後,HashMap不見了。您不會從該方法返回HashMap,或將其存儲在任何地方。

如果你真的想要數據「排序」,你應該添加一個「排序by」子句到您的查詢。

你可能要考慮退回HashMapsortNumber()方法,然後建築String秒的陣列出來的那個,然後在對話框生成調用setItems()而不是使用setCursor()

+1

感謝David Wasser,你給了我需要的確切指針。 – Fam1