我是android的新手。我尝试从Database
获取数据并将其放入HashMap
。但我在这里遇到了一些问题。当我尝试输入数据时,我收到了错误。
我在代码中对错误行发表了评论。你可以在下面查看
这是我的班级
private static final String TAG_ITEM_NAME = "item_name";
// Hashmap for ListView
ArrayList<HashMap<String, String>> searchlist;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
searchlist = new ArrayList<HashMap<String, String>>();
Intent search = getIntent();
String searchResult = search.getStringExtra("TAG_SEARCH");
DatabaseHandler db = new DatabaseHandler(
List <AllItem> allItems = new ArrayList<AllItem>();
allItems = db.getAllSearchResult(searchResult);
HashMap<String, AllItem> all_Items = new HashMap<String, AllItem>();
for(AllItem cn : allItems) {
String item_name = cn.getItem_name();
//AllItem item_name = all_Items.put(cn.getItem_name(), cn);
all_Items.put(TAG_ITEM_NAME,item_name); // I got error here
}
searchlist.add(all_Items);
ListAdapter adapter = new SimpleAdapter(
Search.this, searchlist,
R.layout.searchlayout, new String[] {TAG_ITEM_NAME},
new int[] { R.id.category_name}
);
// Assign adapter to ListView
listview.setAdapter(adapter);
}
错误说The Method put(String, Allitem) int type Hashmap<String,Allitem> is not applicable for the argument (String, String)
如何解决此错误?在此之前谢谢:D
答案 0 :(得分:1)
all_items需要String
和AllItem
,但您要在此行中放置两个String
:
// TAG_ITEM_NAME is a String and item_name is also a String
all_Items.put(TAG_ITEM_NAME,item_name);
答案 1 :(得分:1)
您尝试将地图作为值字符串放入,但是将expect映射为值AllItem,因此您必须以这种方式修改代码:
for(AllItem cn : allItems) {
String item_name = cn.getItem_name();
all_Items.put(item_name , cn );
}
此代码将使用与您的对象名称相等的键将您的类对象添加到地图中。
答案 2 :(得分:0)
您的HashMap
如下:
HashMap<String, AllItem> all_Items = new HashMap<String, AllItem>();
这意味着它有String
个密钥和AllItem
个值。您可以将AllItem
对象放在此HashMap
。
写作时
all_Items.put(TAG_ITEM_NAME,item_name); // I got error here
您在String
内放置HashMap
,因此会出错。
你应该这样做:
all_Items.put(TAG_ITEM_NAME,cn);
答案 3 :(得分:0)
您的散列图是<String, Allitem>
。当您尝试将<String, String>
放入其中时。
all_Items.put(TAG_ITEM_NAME, item_name);
应改为
all_Items.put(TAG_ITEM_NAME, cn);
希望你能有所作为。
答案 4 :(得分:0)
all_Items
被定义为包含<String, AllItem>
键值对的散列映射,如下所示:
HashMap<String, AllItem> all_Items = new HashMap<String, AllItem>();
但您尝试将<String,String>
键值对推送到all_Items
hashmap中:
all_Items.put(TAG_ITEM_NAME,item_name); // I got error here
您似乎想要将AllItem
对象推送到item_name
,这可以完成:
all_Items.put(item_name, cn);
答案 5 :(得分:0)
我没有看到代码中的连接,但使用了给定的信息,您的错误可能与代码中的searchlist
变量有关。
改变这个:
ArrayList<HashMap<String, String>> searchlist;
到此:
ArrayList<HashMap<String, AllItem>> searchlist;
答案 6 :(得分:0)
这是因为您宣布HashMap<String, AllItem>
并尝试放置all_Items.put(TAG_ITEM_NAME,item_name); which would probably be HashMap<String, String>()
。