【问题标题】:get ArrayList from Parse Object从解析对象中获取 ArrayList
【发布时间】:2015-04-18 20:21:53
【问题描述】:

我有一个 Parse 对象,它的值包含用户 ID 的 ArrayList。我无法弄清楚如何检索整个 ArrayList(不仅仅是列表中的 1 个值)我的代码看起来像这样..但总是出现错误(Array 返回为空):

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Food");
    query.whereEqualTo("objectId", parseId);
    query.getFirstInBackground(new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject parseObject, ParseException e) {
            if (e == null) {
                  ArrayList<String> list = (ArrayList<String>) 
   parseObject.get("userList");// This is where I don't know what to use to get the Array

}

else {
                AlertDialog.Builder builder = new AlertDialog.Builder(ThisActivity.this);
                builder.setTitle(R.string.error_title)
                        .setMessage("error")
                        .setPositiveButton("ok", null);
                AlertDialog dialog = builder.create();
                dialog.show();
            }
         }
    });

我只想(从对象)加载用户 ID 数组并在此活动的其他地方使用该数组。对象中的所有其他值都是字符串值,并且可以使用 .getString 加载。

我知道我可能已经离开了,所以任何帮助都将不胜感激。

【问题讨论】:

  • @IdusOrtus 它来自 parse.com API。我认为从get 返回的对象将是 JSONArray,而不是 ArrayList。您可以使用调试器进行确认。

标签: java android arrays arraylist parse-platform


【解决方案1】:
//Try This To Retrieve All Records In Server using findInBackground()
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Food");
query.whereEqualTo("objectId", parseId);
query.findInBackground(new GetCallback<ParseObject>() {
@Override
public void done(List<ParseObject> parseObject, ParseException e) {
    if (e == null) {
    for (int i = 0; i<parseObject.size(); i++){
        ParseObject stObj = parseObject.get(i);
        List<String>list = stObj.getList("userList");
        //Transfer list content to array stockArr
        String[] stockArr = new String[list.size()];
        stockArr = list.toArray(stockArr);
        //list contains userlist - To add to list without transferring content to array use next line of code below
        list.add("Add This To The List");
        //To save updated list use next two lines of code below
        stObj.put("userList", list);
        stObj.saveInBackground();
    }
    } else {
        AlertDialog.Builder builder = new AlertDialog.Builder(ThisActivity.this);
        builder.setTitle(R.string.error_title)
                .setMessage("error")
                .setPositiveButton("ok", null);
        AlertDialog dialog = builder.create();
        dialog.show();
    }
    }
});


//Try This To Retrieve ONLY First Record In Server using getFirstInBackground()
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Food");
query.whereEqualTo("objectId", parseId);
query.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(List<ParseObject> parseObject, ParseException e) {
    if (e == null) {
        ParseObject stObj = parseObject.get(0);
        List<String>list = stObj.getList("userList");
        //Transfer list content to array stockArr
        String[] stockArr = new String[list.size()];
        stockArr = list.toArray(stockArr);
    } else {
        AlertDialog.Builder builder = new AlertDialog.Builder(ThisActivity.this);
        builder.setTitle(R.string.error_title)
                .setMessage("error")
                .setPositiveButton("ok", null);
        AlertDialog dialog = builder.create();
        dialog.show();
    }
    }
});

【讨论】:

    【解决方案2】:

    你应该替换这一行:

    parseObject.get("userList");// This is where I don't know what to use to get the Array
    

    到:

    JSONArray array = parseObject.getJSONArray("userList");
    

    它应该可以正常工作。

    【讨论】:

      【解决方案3】:

      我认为您不必使用getFirstInBackground(仅检索一个元素),但您必须使用findInBackground(检索所有对象)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多