问题
Im using listview on android, below code is giving error after clicking on a list item for another new activity
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting list view size
int size = parent.getCount();
// initializing array according to list view size
String[] all_pid = new String[size];
String[] all_name = new String[size];
String[] all_address = new String[size];
String[] all_latitude = new String[size];
String[] all_longitude = new String[size];
// looping data into array according to getItemAtPosition
for (int i = 0; i < size; i++) {
HashMap<String, String> extractor = (HashMap<String, String>) parent.getItemAtPosition(i);
// fill data into array
all_pid[i] = extractor.get("pid");
all_name[i] = extractor.get("name");
all_address[i] = extractor.get("address");
all_latitude[i] = extractor.get("latitude");
all_longitude[i]=extractor.get("longitude");
}
Intent in = new Intent(getApplicationContext(),SingleContactActivityMainFragment.class);
in.putExtra("APid", all_pid);
in.putExtra("AName", all_name);
in.putExtra("AAddress", all_address);
in.putExtra("ALatitude", all_latitude);
in.putExtra("ALongitude", all_longitude);
// added size for initial view pager initialization
in.putExtra("size", size);
in.putExtra("QUOTES", position);
Log.v(DEBUG, "position Passed: " + position);
startActivity(in);
}
Error shown is:
05-27 15:30:12.985: E/AndroidRuntime(23905): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.HashMap
05-27 15:30:12.985: E/AndroidRuntime(23905): at com.example.fightvaw.jsontest.MainActivity$4.onItemClick(MainActivity.java:226)
how to solve these type of error ?
回答1:
this is previous code on my custom adapter:
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return (position);
}
and this is solved code in my custom adapter:
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}
in which data
is defined as ArrayList<HashMap<String, String>> data;
回答2:
This line
HashMap<String, String> extractor = (HashMap<String, String>) parent.getItemAtPosition(i);
causes your crash. parent
is an AdapterView and returns an Integer if you call getItemAtPosition(i)
.
You can fix this by replacing parent
with your ListAdapter (which you needed to fill your ListView). Your code should look like this afterwards:
HashMap<String, String> extractor = youListAdapter.get(i);
回答3:
Looks like your parent AdapterView
is designed for holding int
values, they will be boxed automatically to Integer
. That is why by calling parent.getItemAtPosition(i)
you get Integer
. Obviously, Integer
cannot be casted to HashMap
来源:https://stackoverflow.com/questions/23886659/integer-cannot-be-cast-to-java-util-hashmap