Ahm 昨天我发布了关于使用 listfragment 在 listview 中查看数据的问题的代码。我得到了解决方案,它工作正常。但现在的问题是 getItem 函数返回一个错误说“java.lang.classcastexception:java.lang.string”。这是我的代码:
我的列表片段:
public class ListTest2 extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
ListAdapter listAdapter = getListAdapter();
Log.i("here","here");
ListSql cc = (ListSql) listAdapter.getItem(position);
//Toast.makeText(getActivity(), "" + l.getSelectedItem() ,Toast.LENGTH_LONG).show();
ArrayList<String> arr = new ArrayList<String>();
Log.i("",cc.getName());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
List<ListSql> results = new ArrayList<ListSql>();
ArrayList<String> arr = new ArrayList<String>();
HotorNot hon = new HotorNot(getActivity());
hon.open();
arr = hon.listme(arr);
hon.close();
Toast.makeText(getActivity(), arr.toString(), Toast.LENGTH_LONG).show();
setListAdapter(new SqlParser(getActivity(),arr));
}
}
我的 ListSql 类:
public class ListSql {
private String Fname;
private String Fpass;
private ArrayList<String> arList;
private Context myContext;
private List<ListSql> items;
private LayoutInflater mInflater;
private DBhelper myHelper;
private SQLiteDatabase myDbase;
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "_persons_name";
public static final String KEY_HOTNESS = "person_hotness";
private static final String DATABASE_NAME = "HotOrNotdb";
private static final String DATABASE_TABLE = "peopleTable";
private static final int DATABASE_VERSION = 1;
public static class DBhelper extends SQLiteOpenHelper{
public DBhelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"Create Table " + DATABASE_TABLE + " (" +
KEY_ROWID + " Integer PRIMARY KEY AUTOINCREMENT, " +
KEY_NAME + " TEXT NOT NULL, " +
KEY_HOTNESS + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE);
onCreate(db);
}
}
public String getName(){
return Fname;
}
public String getPass(){
return Fpass;
}
public ListSql open(){
myHelper = new DBhelper(myContext);
myDbase = myHelper.getWritableDatabase();
Log.i("open","open");
return this;
}
public void close(){
myHelper.close();
}
public ArrayList<String> Listme(ArrayList<String> arr){
String sql = "select * from " + DATABASE_TABLE;
Cursor c = myDbase.rawQuery(sql, null);
if(c !=null){
if (c.moveToFirst()) {
do {
String firstName = c.getString(c.getColumnIndex(KEY_NAME));
String pass = c.getString(c.getColumnIndex(KEY_HOTNESS));
arr.add("username " + firstName + ", Password: " + pass);
}while (c.moveToNext());
}
return arr;
}
return null;
}
}
和我的 Baseadapter:
public class SqlParser extends BaseAdapter {
private Context myContext;
private ArrayList<String> items;
private LayoutInflater mInflater;
private DBhelper myHelper;
private SQLiteDatabase myDbase;
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "_persons_name";
public static final String KEY_HOTNESS = "person_hotness";
private static final String DATABASE_NAME = "HotOrNotdb";
private static final String DATABASE_TABLE = "peopleTable";
private static final int DATABASE_VERSION = 1;
public SqlParser(Context context ,ArrayList<String> arr){
this.myContext = context;
this.items = arr;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private class ViewHolder {
public TextView textView;
}
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ArrayList<String> arr = new ArrayList<String>();
View view = convertView;
ViewHolder viewHolder;
TextView namef ;
ImageView prof;
Bitmap bMap;
if (view == null) {
view = mInflater.inflate(R.layout.listinflate, parent, false);
/**
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.textView1);
view.setTag(viewHolder); **/
/*** You can do this manualy without using holder ***/
namef = (TextView)view.findViewById(R.id.textView1);
/*** You can do this manualy on setting the tag to individual components rather than using holder ***/
view.setTag(namef);
}else {
viewHolder = (ViewHolder) view.getTag();
namef = (TextView) view.getTag();
}
namef.setText(items.get(position));
return view;
}
}
我不知道是什么导致了这个错误。谢谢