【问题标题】:Populate JSON Object with Listview Data Android使用 Listview 数据 Android 填充 JSON 对象
【发布时间】:2015-11-12 21:40:09
【问题描述】:

我有一个 ListView,我用数据库中的数据填充它。

ArrayList<HashMap<String, String>> userList = dBcode.getAllUsers();

ListAdapter adapter = new SimpleAdapter(
                Main_Activity.this,userList, R.layout.list_view_search_item, new String[]
                { "name", "age", },
                new int[] {R.id.name, R.id.Age});

效果很好。

现在我想使用 ListView 中的值为 Listview 中的每一行创建一个新的 vResult,而不是像下面的示例那样键入它。

private Result[] resultArray = {
        vResult("Thomas", "12"),
        vResult("Mike", "15")};

这是从数据库中检索数据的代码。

 public ArrayList<HashMap<String, String>> getAllUsers(){

    ArrayList<HashMap<String, String>>userArrayList = new ArrayList<HashMap<String, String>>();

    String selectQuery = "SELECT * FROM user ORDER BY name";

    SQLiteDatabase database = this.getWritableDatabase();

    Cursor cursor = database.rawQuery(selectQuery, null);

    if(cursor.moveToFirst()){

        do{

            HashMap<String, String> contactMap = new HashMap<String, String>();
            contactMap.put("name", cursor.getString(0));
            contactMap.put("age", cursor.getString(1));

            userArrayList.add(contactMap);

        } while(cursor.moveToNext());

    }

    return userArrayList;

}

谢谢

【问题讨论】:

  • 很难理解你的目标是什么
  • @Joseph82 我不想硬编码 resultArray 中的值,我希望它使用来自数据库的列表视图中的值。谢谢
  • 您的数据库是远程数据库(即 Postgres、MongoDB、MySQL 数据库)还是本地数据库(SQLite)。另外,响应的格式是什么:如果它来自远程数据库? JSON?对于本地数据库,您应该返回对象列表,而不是 HashMap,其中对象具有名称和年龄等字段(例如,员工对象)
  • @LucasCrawford 它的 sqlLite,我已经包含了检索数据库数据的代码。谢谢
  • 好吧,我是这么认为的。因此,与其创建 HashMap 并在 hashmap 中返回结果,不如返回 List ,其中 Person 是一个简单的 POJO,具有 name 和 age 字段。这将简化您的开发过程并允许在未来进行扩展!此外,您需要通过扩展 BaseAdapter 创建自己的适配器。虽然一个简单的适配器可以工作,但您最终还是需要做更多的事情,而 BaseAdapter 将允许您这样做。例如,使用 Person 数据自定义视图。

标签: java android listview android-adapter


【解决方案1】:

如果您不使用 HashMap,而是创建一个类来保存您的用户字段(使用 getter/setter 方法),这对您来说可能会更容易:

public class User {
    private String mName;
    private String mAge;

    public User(String name, String age){
        mName = name;
        mAge = age;
    }

    public String getName(){
        return mName;
    }
    public String getAge(){
        return mAge;
    }
    public String setName(String name){
        mName = name;
    }
    public String setAge(String age){
        mAge = age;
    }
}

并从数据库中创建一个用户对象:

ArrayList<User> userArrayList = new ArrayList<User>();
...
contact = new User(cursor.getString(0), cursor.getString(1));
userArrayList.add(contact);

您可以调用adapter.getItem(position)返回特定索引处的数据对象:

User user = (User)adapter.getItem(0);

然后将数据转换为您喜欢的任何格式。也许是这样的:

private Result[] resultArray = new Result[1];
resultArray[0] = vResult(user.getName(), user.getAge());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2023-03-21
    • 2014-07-23
    • 2017-02-10
    • 2022-11-25
    • 2012-09-16
    相关资源
    最近更新 更多