我正在尝试填充Hashmap
,如下所示:
public static final String KEY_PROPNAME = "";
public static final String KEY_KEYWORDS = "";
public static final String KEY_THUMB_URI = "";
ArrayList<HashMap<String, String>> clipsList = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < clipDetailsArr.length; i = i
+ constants.noOfColumns) {
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_PROPNAME, clipDetailsArr[i]);
map.put(KEY_PROPTYPE, clipDetailsArr[i + 1]);
map.put(KEY_PRICE, clipDetailsArr[i + 2]);
map.put(KEY_LOCATION, clipDetailsArr[i + 3]);
map.put(KEY_SQFT, clipDetailsArr[i + 4]);
map.put(KEY_SQFTTYPE, clipDetailsArr[i + 5]);
map.put(KEY_BED, clipDetailsArr[i + 6]);
map.put(KEY_BATH, clipDetailsArr[i + 7]);
map.put(KEY_KEYWORDS, clipDetailsArr[i + 8]);
map.put(KEY_THUMB_URI, clipDetailsArr[i + 9]);
Log.i("Main", "Clip clipDetailsArr[]: 0=" + clipDetailsArr[i] + " ,1=" + clipDetailsArr[i + 1]
+ " ,2=" + clipDetailsArr[i + 2] + " ,3=" + clipDetailsArr[i + 3] + " ,4="
+ clipDetailsArr[i + 4] + " ,5=" + clipDetailsArr[i + 5] + " ,6="
+ clipDetailsArr[i + 6] + " ,7=" + clipDetailsArr[i + 7] + " ,8="
+ clipDetailsArr[i + 8] + " ,9=" + clipDetailsArr[i + 9]);
Log.i("Main", "Clip PROPNAME=" + MainActivity.KEY_PROPNAME
+ " ,KEYWORDS" + MainActivity.KEY_KEYWORDS + " ,URI="
+ MainActivity.KEY_THUMB_URI);
Log.i("Main", "Clip get PROPNAME=" + map.get(KEY_PROPNAME)
+ " ,KEYWORDS" + map.get(KEY_KEYWORDS) + " ,URI="
+ map.get(KEY_THUMB_URI));
clipsList.add(map);
}
日志的输出是这样的:
Clip clipDetailsArr[]: 0=Opt out ,1=Residentail ,2=10000 ,3=Andheri ,4=500 ,5=Carpet ,6=2 ,7=1 ,8=optout ,9=/mnt/sdcard/Clipping/optout.png
Clip PROPNAME= ,KEYWORDS ,URI=
Clip get PROPNAME=/mnt/sdcard/Clipping/optout.png,
KEYWORDS/mnt/sdcard/Clipping/optout.png,
URI=/mnt/sdcard/Clipping/optout.png//AND SO ON
参考上面的日志,我在我的数组中有值,我使用map.put(key,value)
将它们放入数组,但在第二个日志MainActivity.KEY_PROPNAME
中,其他字段为空。此外,当我使用map.get(key)
时,所有列都包含最后一列的数据。
请注意,最后一列数据已正确填充。
我在这里做错了吗?任何帮助表示赞赏。
答案 0 :(得分:3)
您使用相同的密钥""
至少有三个.put()
!!您已定义:
public static final String KEY_PROPNAME = "";
public static final String KEY_KEYWORDS = "";
public static final String KEY_THUMB_URI = "";
然后将Map
填充为:
map.put(KEY_PROPNAME, clipDetailsArr[i]);
map.put(KEY_KEYWORDS, clipDetailsArr[i + 8]);
map.put(KEY_THUMB_URI, clipDetailsArr[i + 9]);
根据Javadoc:
如果地图以前包含该键的映射,则替换旧值。
答案 1 :(得分:1)
public static final String KEY_PROPNAME = "";
public static final String KEY_KEYWORDS = "";
public static final String KEY_THUMB_URI = "";
这里所有的键都具有相同的值/名称,因此所有数据都将存储在同一个键中!!
答案 2 :(得分:1)
public static final String KEY_PROPNAME = "";
public static final String KEY_KEYWORDS = "";
public static final String KEY_THUMB_URI = "";
这是错误,而不是从您的名称创建空字符串,您应该将它们用作获取所请求行为的键。
只是为了保持你的代码几乎与以下内容相同:
public static final String KEY_PROPNAME = "KEY_PROPNAME";
public static final String KEY_KEYWORDS = "KEY_KEYWORDS";
public static final String KEY_THUMB_URI = "KEY_THUMB_URI";
这应该是技巧,即使它有点时髦;)