我在使用哈希图排序的数组列表中有一个 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()
。