【问题标题】:Problem to view the content of my listview查看我的列表视图内容的问题
【发布时间】:2019-10-28 22:04:55
【问题描述】:

编辑和删除列表视图中的项目,但问题是当我想查看我的列表时应用程序崩溃

我已经看到问题出在第 34 行,因为“user”的值为 null

public class PageUser extends AppCompatActivity {

    ArrayList<User> userList;
    ListView listView;
    User user;
    DatabaseHelper mDatabaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page_user);
        mDatabaseHelper = new DatabaseHelper(this);
        userList = new ArrayList<>();
        Cursor data = mDatabaseHelper.getListContents();
        int numRows = data.getCount();
        if (numRows == 0) {
            Toast.makeText(PageUser.this, "Aucun utilisateur enregistré !", Toast.LENGTH_LONG).show();
        } else {
            int i = 0;
            while (data.moveToNext()) {
                user = new User( data.getString(1), data.getString(2), data.getString(3)); //The problem is here
                userList.add(i, user);
                System.out.println(data.getString(1) + " " + data.getString(2) + " " + data.getString(3));
                i++;
            }
            UserAdaptater adapter = new UserAdaptater(this, R.layout.user_cell, userList);
            listView = (ListView) findViewById(R.id.maListe);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    String recupID = userList.get(i).getID();
                    String recupNom = userList.get(i).getNom();
                    String recupPrenom = userList.get(i).getPrenom();
                    Intent intent = new Intent(PageUser.this, EditUser.class);
                    intent.putExtra("ID",recupID);
                    intent.putExtra("name",recupNom);
                    intent.putExtra("fname",recupPrenom);
                    startActivity(intent);
                }
            });
        }
    }

    public void page_ajouter(View view){
        startActivity(new Intent(this, AddUser.class));
    }
}

这是用户类

包 com.example.changepage;

public class User {

private String ID;
private String nom;
private String prenom;

public User(String id, String nom, String prenom) {
    this.ID = id;
    this.nom = nom;
    this.prenom = prenom;
}

public String getID() {
    return ID;
}

public void setID(String ID) {
    this.ID = ID;
}

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}

public String getPrenom() {
    return prenom;
}

public void setPrenom(String prenom) {
    this.prenom = prenom;
}
}

还有我的 getListContents 函数

public Cursor getListContents() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    return data;
}

debug PageUser

我想解决这个问题以查看列表

【问题讨论】:

  • 这可能是很多事情。请添加调试。 getListContents() 函数返回什么,User 类是什么样子的?
  • 好的,所以 getListContents() 函数返回数据,我添加了调试。谢谢您的回复

标签: java android mysql xml sqlite


【解决方案1】:

尝试创建单独的变量并首先将光标数据分配给这些变量,然后使用这些变量创建用户。您可以使用 new User() 调用 add。

还要注意,您的第一个索引(对于 _id)是 1!它是否正确?它可能从 0 开始。这就是为什么我要问 getListContents() 函数返回什么;如,数据结构是什么样的。

String _id = "";
String _nom = "";
String _prenom = "";

while (data.moveToNext()) {
    _id = data.getString(1);
    _nom = data.getString(2);
    _prenom = data.getString(3);

    if(_id == null || _nom == null || _prenom == null) {
        System.out.println("Database field is null!");
    }
    else {
        userList.add( new User( _id, _nom, _prenom));
        System.out.println(_id  + " " + _nom  + " " + _prenom);
    }
}

【讨论】:

  • 非常感谢您帮助我,我的错误是 data.getString() 由 1 而不是 0 开始
  • 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多