哈希映射值未附加到 Alertdialog
Hashmap values not appended to Alertdialog
我在数组列表中有一个调用日志(显示在警报对话框中),它已使用哈希图排序,任何时候我尝试查看此调用日志时,它都只显示调用日志查询的结果,但在我的 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());
}
}
这有很多错误,很难知道从哪里开始:-(
首先,你不能"sort"任何使用HashMap
的东西。这两个概念是互斥的。
其次,您有一个 while
循环,您在其中为光标中的每一行创建并显示 AlertDialog
。这不可能是对的。
接下来,您将在 AlertDialog.Builder
上调用 setCursor()
并传递 Cursor
。对话框构建器正在使用此 Cursor
中的数据来构建要在对话框中显示的内容。您拥有 "sorted" 数据这一事实无关紧要,因为您已将原始查询中的数据提供给对话构建器。
接下来,你的方法sortNumber()
创建一个HashMap
并填充它,但是这个HashMap
是这个方法的局部变量,所以在方法returns之后, HashMap
消失了。您不会 return 来自该方法的 HashMap
,也不会将其存储在任何地方。
如果您确实需要数据 "sorted",您应该在查询中添加一个 "ordered by" 子句。
您可能需要考虑从 sortNumber()
方法 returning 您的 HashMap
,然后从中构建一个 String
数组,然后调用 setItems()
在对话框构建器上,而不是使用 setCursor()
.
我在数组列表中有一个调用日志(显示在警报对话框中),它已使用哈希图排序,任何时候我尝试查看此调用日志时,它都只显示调用日志查询的结果,但在我的 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());
}
}
这有很多错误,很难知道从哪里开始:-(
首先,你不能"sort"任何使用HashMap
的东西。这两个概念是互斥的。
其次,您有一个 while
循环,您在其中为光标中的每一行创建并显示 AlertDialog
。这不可能是对的。
接下来,您将在 AlertDialog.Builder
上调用 setCursor()
并传递 Cursor
。对话框构建器正在使用此 Cursor
中的数据来构建要在对话框中显示的内容。您拥有 "sorted" 数据这一事实无关紧要,因为您已将原始查询中的数据提供给对话构建器。
接下来,你的方法sortNumber()
创建一个HashMap
并填充它,但是这个HashMap
是这个方法的局部变量,所以在方法returns之后, HashMap
消失了。您不会 return 来自该方法的 HashMap
,也不会将其存储在任何地方。
如果您确实需要数据 "sorted",您应该在查询中添加一个 "ordered by" 子句。
您可能需要考虑从 sortNumber()
方法 returning 您的 HashMap
,然后从中构建一个 String
数组,然后调用 setItems()
在对话框构建器上,而不是使用 setCursor()
.