我在一个使用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());
}
}
答案 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()
。