2015-01-13 3 views
-2

У меня есть callog (отображается в диалоговом окне предупреждения) в arraylist, который был отсортирован с использованием hashmap, в любое время, когда я пытаюсь просмотреть этот callog, он показывает только результат запроса calllog, но в мой логарифм показывает, что номера правильно отсортированы. Как я могу добавить этот результат в logcat в диалоговое окно предупреждения? Я боролся с ним в течение нескольких дней, и я не могу понять, что это.Значения Hashmap не добавлены к 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. Эти 2 понятия взаимоисключающие.

во-вторых, у вас есть while цикл, в котором вы создаете и показывающую AlertDialog для каждой строки курсора. Это не может быть правильным.

Далее вы звоните setCursor() на AlertDialog.Builder и передача Cursor. Конструктор диалогового окна использует данные в этом Cursor для создания содержимого, которое будет отображаться в диалоговом окне. Тот факт, что вы «отсортировали» данные, не имеет значения, поскольку вы предоставили диалоговому построителю данные из вашего необработанного запроса.

Далее, ваш метод sortNumber() создает HashMap и наполняет его, но это HashMap является локальной переменной для этого метода, поэтому после возвращения метода, то HashMap ушел. Вы не возвращаете метод HashMap или храните его в любом месте.

Если вы действительно хотите, чтобы данные «сортировались», вы должны просто добавить предложение «упорядочено по» в ваш запрос.

Вы можете рассмотреть вопрос о возвращении вашего HashMap из метода sortNumber(), а затем строит массив String с из этого и последующего вызова setItems() в диалоговом строителем вместо использования setCursor().

+1

Спасибо Дэвиду Вассеру, ты дал мне точный указатель, который мне нужен. – Fam1

Смежные вопросы