使用BaseAdapter子类时,ListView不显示任何数据

时间:2012-07-03 09:56:25

标签: android

我想要发生的是我将使用列表片段在列表视图中显示所有数据。我下载了一些源代码并对其进行编辑以获得所需的输出。继承我的代码:

    List<ListSql> results = new ArrayList<ListSql>();

    setListAdapter(new SqlParser(getActivity(),results));

这是我的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 ListSql(Context context){

        this.arList = Listme(arList);
        this.myContext = context;
    }

    public String getName(){
        return Fname;
    }

    public String getPass(){

        return Fpass;
    }

    public ArrayList<String> getArr(){

        return arList;
    }



    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());
            } 
            Log.i("hahahaha","hehe");
            return arr;

        }
        Log.i("hahahaha","not here");
        return null;

    }




}

和我的baseadapter:

public class SqlParser extends BaseAdapter {

    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 SqlParser(Context context ,List<ListSql> items){
        this.myContext = context;
        this.items = items;
    }


    private class ViewHolder {
        public TextView textView;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    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).Listme(arr).get(position).toString());

        return view;
    }
}

问题是:我的listview没有显示任何数据。我很确定我从sqlite检索数据但我无法管理它以显示在我的列表视图中..

4 个答案:

答案 0 :(得分:2)

你在getCount()中返回0,

  public int getCount() {
    // TODO Auto-generated method stub
    return 0;
}

如果您返回0,则表示没有可用数据。在这里你必须传递实际的数据长度。

也许在你的情况下你必须传递List大小,

public int getCount() {
        // TODO Auto-generated method stub
        items.size();
    }

答案 1 :(得分:1)

public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

这是你的问题。 getCount()必须返回您要显示的数据集的大小。由于您返回0,因此永远不会调用getView()回调。

中更改它
   public int getCount() {
            // TODO Auto-generated method stub
            return (items == null) ? 0 : items .size();
   }

答案 2 :(得分:0)

CursorAdaptor在这里可以更好地工作但是在回答你的问题时你需要实现以下功能,否则适配器会认为你的列表有0个项目

public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

你需要在getCount()中返回列表大小,getItem()中的实际列表项和getItemId()中的合理值

答案 3 :(得分:0)

我知道了......我将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 ListSql(Context context, ArrayList<String> arList){

        this.arList = Listme(arList);
        this.myContext = context;
    }

    public String getName(){
        return Fname;
    }

    public String getPass(){

        return Fpass;
    }

    public ArrayList<String> getArr(ArrayList<String> arr){

        return arr;
    }



    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);
                    getArr(arr);
                }while (c.moveToNext());
            } 
            Log.i("hahahaha","hehe");
            return getArr(arr);

        }
        Log.i("hahahaha","not here");
        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 this.items.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return this.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;
    }
}