使用自定义适配器在ListFragment中填充ParseObject

时间:2014-11-02 18:53:33

标签: android parse-platform android-arrayadapter android-listfragment

我正在尝试使用自定义ArrayAdapter和自定义数据对象填充ListFragment。持久性远程存储是一个Parse数据集,它映射到我创建的自定义Data对象。问题是我无法在提供给arrayadapter的数组列表中填充来自Parse的查询响应。当我使用虚拟数据执行此操作时,它可以正常工作。当我使用List时,它没有。

非常感谢您的帮助。

代码段:

private List<DataItem> itemsList; //Initialize a list of Data Items type

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    itemsList = new ArrayList<DataItem>();

    //Parse Initialised here

    ParseQuery<ParseObject> query = ParseQuery.getQuery("object");
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objectList, ParseException e) {
            if(e == null){
                addItem(objectList);
            } else {
                Log.d("List Activity",e.getMessage());
            }
        }
    });

    //Static Data Population - This works fine
    DataItem item1 = new DataItem();
    item.setName("SampleName");
    item.setPhone("12345678");
    item.setAddress("Mumbai");

    //Set Adapter
    ListAdapter adapter = new ListAdapter(getActivity(), itemsList);
    setListAdapter(adapter);
    adapter.notifyDataSetChanged();
}

public void addItem(List<ParseObject> objectList){
    for(int i =0; i< objectList.size(); i++){
        DataItem item = new DataItem();
        item.setName(objectList.get(i).getString("name").toString());
        item.setPhone(objectList.get(i).getString("phone").toString());
        item.setAddress(objectList.get(i).getString("address").toString());
        itemsList.add(item); //This is not working
    }

}

1 个答案:

答案 0 :(得分:0)

你需要一个JSON对象的平面处理程序才能完成&#39;和&#39; addItem&#39; ...

原因是查询返回包含JsonRoot对象的平面字符串 - &gt;包含&#39;结果&#39;在调用将从Json.Results.Array中的条目创建Map对象的方法之前必须显式解包的数组....

添加一个得到平坦的Json对象的东西,并在其中迭代results.array ......

public  void getList(JsonNode root){
        String _mimeTyp;
        ArrayNode array = (ArrayNode) root.path("results");
        for(JsonNode node :  array){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("id", node.path("objectId").getTextValue());
            map.put("msg", node.path("msg").getTextValue()); 
   ...
            $myArray<HashMap>.add(map);

然后将最后一个arrary提供给lazyAdapter ....

list=(ListView)findViewById(R.id.list);
adapter=new LazyAdapter(myact, $myArray, new AQuery(myact));
list.setAdapter(adapter);