我想要发生的是我将使用列表片段在列表视图中显示所有数据。我下载了一些源代码并对其进行编辑以获得所需的输出。继承我的代码:
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检索数据但我无法管理它以显示在我的列表视图中..
答案 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;
}
}