Java 带BaseAdapter的空白ListView

Java 带BaseAdapter的空白ListView,java,android,android-listview,android-sqlite,baseadapter,Java,Android,Android Listview,Android Sqlite,Baseadapter,我正在尝试使用BaseAdapter从数据库中填充列表。Logcat没有显示任何错误。这是我的密码 在这个DatabaseHelper类中,我有一个表STUDENTS DatabaseHelper.java public long saveData(Student std) { SQLiteDatabase db = getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("NAME",s

我正在尝试使用
BaseAdapter
从数据库中填充列表。Logcat没有显示任何错误。这是我的密码

在这个
DatabaseHelper
类中,我有一个表STUDENTS

DatabaseHelper.java

public long saveData(Student std) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("NAME",std.name);
    cv.put("CITY",std.city);
    cv.put("AGE",std.age);
    long id = db.insert("STUDENTS", null, cv);
    db.close();
    return id;
}

public ArrayList<Student> getAllStudent() {
    ArrayList<Student> studentArrayList = new ArrayList<Student>();
    SQLiteDatabase db = getWritableDatabase();
    Cursor cursor = db.query("STUDENTS",null,null,null,null,null,null);
    Log.e("COUNT",""+cursor.getCount());

    while (cursor.moveToNext()) {
        Student s = new Student();
        s.name = cursor.getString(cursor.getColumnIndex("NAME"));
        s.city = cursor.getString(cursor.getColumnIndex("CITY"));
        s.age = cursor.getString(cursor.getColumnIndex("AGE"));
        studentArrayList.add(s);
    }
    db.close();
    return studentArrayList;
}
public class MyBaseAdapter extends BaseAdapter {

ArrayList<Student> myList = new ArrayList<Student>();
LayoutInflater inflater;
Context context;

public MyBaseAdapter(Context context,ArrayList<Student> myList) {
    this.myList = myList;
    this.context = context;
    inflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
    return myList.size();
}

@Override
public Student getItem(int position) {
    return myList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    myViewHolder viewHolder;
    if(convertView == null){
        convertView = inflater.inflate(R.layout.single_row, null);
        viewHolder = new myViewHolder();
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (myViewHolder) convertView.getTag();
    }

    viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.nameTextView);
    viewHolder.cityTextView = (TextView) convertView.findViewById(R.id.cityTextView);
    viewHolder.ageTextView = (TextView) convertView.findViewById(R.id.ageTextView);

    viewHolder.nameTextView.setText(myList.get(position).name);
    viewHolder.cityTextView.setText(myList.get(position).city);
    viewHolder.ageTextView.setText(myList.get(position).age);
    return convertView;
}

public class myViewHolder {
    TextView nameTextView, cityTextView, ageTextView;
}
}
public class Student {
 String name;
 String city;
 String age;
}
在我的主要活动中,我试图将数据填入列表中

MainActivity.java

public class MainActivity extends ActionBarActivity {

public EditText searchEditText;
public Button addButton;
public ListView studentListView;
public DatabaseHelper dbHelper;
public ArrayList<Student> arrayList;
public MyBaseAdapter myBaseAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    searchEditText = (EditText)findViewById(R.id.searchEditText);
    addButton = (Button)findViewById(R.id.addButton);
    studentListView = (ListView) findViewById(R.id.studentListView);

    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,AddNewStudent.class);
            startActivity(i);
        }
    });

    dbHelper = new DatabaseHelper(getApplicationContext());
    arrayList = dbHelper.getAllStudent();
    myBaseAdapter = new MyBaseAdapter(MainActivity.this,arrayList);
    studentListView.setAdapter(myBaseAdapter);
    myBaseAdapter.notifyDataSetChanged();
}
}
公共类MainActivity扩展了ActionBarActivity{
公共编辑文本搜索编辑文本;
公共按钮添加按钮;
公共列表视图学生列表视图;
公共数据库助手dbHelper;
公共ArrayList ArrayList;
公共MyBaseAdapter MyBaseAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchEditText=(EditText)findViewById(R.id.searchEditText);
addButton=(按钮)findViewById(R.id.addButton);
studentListView=(ListView)findViewById(R.id.studentListView);
addButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图i=新意图(MainActivity.this,AddNewStudent.class);
星触觉(i);
}
});
dbHelper=newdatabasehelper(getApplicationContext());
arrayList=dbHelper.getAllStudent();
myBaseAdapter=新的myBaseAdapter(MainActivity.this,arrayList);
setAdapter(myBaseAdapter);
myBaseAdapter.notifyDataSetChanged();
}
}
单行.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:id="@+id/container">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/nameTextView" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/cityTextView" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/ageTextView" />
    </LinearLayout>


我不知道哪里出错了。

最后,我找到了答案。您只需在getView()方法中添加几行代码,即可将列表中的值分配给模型类对象

public View getView(int position, View convertView, ViewGroup parent) {

    Student std = new Student(); //this line I added
    std = myList.get(position);  //this line I added
    myViewHolder viewHolder;
    if(convertView == null){
        convertView = inflater.inflate(R.layout.single_row, null);
        viewHolder = new myViewHolder();
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (myViewHolder) convertView.getTag();
    }

    viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.nameTextView);
    viewHolder.cityTextView = (TextView) convertView.findViewById(R.id.cityTextView);
    viewHolder.ageTextView = (TextView) convertView.findViewById(R.id.ageTextView);

viewHolder.nameTextView.setText(myList.get(position).name);
viewHolder.cityTextView.setText(myList.get(position).city);
viewHolder.ageTextView.setText(myList.get(position).age);
return convertView;
}

请向我们显示
R.layout.single_行
file的代码我添加了single_行.xml文件。查看我编辑的问题hm,你确定你的
dbHelper.getAllStudent()方法返回正确的数据?您的
Adapter
看起来正常(不包括不正确的视图持有者模式实现),您的
Student
类的所有字段看起来都是空的。
“我正在尝试使用BaseAdapter从数据库中填充列表”
这是完全错误的方法,请使用
SimpleCorsAdapter
代替,dbHelper.getAllStudent();不为空。我调试数组返回我的大小=4。