Excepción de conversión de clase al obtener ListView Value getItem

Ahm Yester, publico mi código sobre mi problema al ver los datos en la vista de lista usando el fragmento de lista. Tengo la solución y funciona bien. Pero ahora el problema es que la función getItem devuelve un error que dice "java.lang.classcastexception: java.lang.string". Aquí está mi código:

Mi fragmento de lista:

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));
      } 
}

Mi clase 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;

    }

}

Y mi adaptador base:

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;
    }
}

No sé qué está causando este error. Gracias

preguntado el 04 de julio de 12 a las 04:07

¿Qué línea está lanzando esa excepción? -

por favor publique su logcat. -

No incluyó las inclusiones en su listado, por lo tanto, no tengo idea de qué es BaseAdapter que probablemente contiene items. -

1 Respuestas

La excepción es lanzada por usted tratando de lanzar un String a una ListSql en:

ListSql cc = (ListSql) listAdapter.getItem(position);

En cambio, debería ser así:

String cc = (String) listAdapter.getItem(position);

ya que su adaptador personalizado devuelve un String from the getItem método.

Respondido 04 Jul 12, 04:07

@nelzkie Al regresar null te refieres a la getItem() ¿método? Si es así, eso está sucediendo porque tienes null valores en el ArrayList que le pasas al adaptador. - usuario

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.