2012-07-04 20 views
2

Ahm Yester我發佈我的代碼,關於我的問題查看列表視圖中的數據使用listfragment。我得到了解決方案,它工作正常。但現在問題是getItem函數返回一個錯誤,說「java.lang.classcastexception:java.lang.string」。這裏是我的代碼:獲取ListView值的類演員異常getItem

我listfragment:

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

我不什麼導致此錯誤。感謝

+0

什麼行引發異常? –

+0

請發佈您的logcat。 – CMA

+0

here:http://pastebin.com/pXhuWyrh – nelzkie

回答

3

唯一的例外是你想在投下StringListSql拋出:

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

相反,它應該是這樣的:

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

爲您的自定義適配器返回StringgetItem方法。

+0

您的鱈魚的作品但它的返回空.. – nelzkie

+0

@nelzkie通過返回'null'你想要getItem()'方法嗎?如果是的話,那是因爲你在傳遞給適配器的'ArrayList'中有'null'值。 – Luksprog

+0

謝謝它現在的作品...我忘了添加一些這就是爲什麼它返回空.. – nelzkie