在调用REST-API时,期望得到一个结果后得到Null列表。

问题描述 投票:0回答:1

我是使用Android和Android网络的新手,我被卡住了。这是我的代码。

private void getParticipantsForMeeting(Integer id)
    {

        AndroidNetworking.get(LOCALHOST + "/meeting?meetingId={meetingid}")
                .addPathParameter("meetingid", String.valueOf(meeting.getId()))
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {

                    @Override
                    public void onResponse(List<User> response) {
                        if (response == null)
                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        else {
                            meeting.setParticipants(response);
                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        Log.println(Log.ERROR, "GETMEETINGPARTICIPANTS", "Error while trying to get participants for meeting");
                    }
                });

    }

当我在 onResponse() 方法,我得到了要求的响应,但在解析该方法后。meeting.getParticipants() 仍然是空的。我不明白我做错了什么,因为除了这个调用,其他的调用都能正常工作。我不明白这种奇怪的行为,我也试过将响应添加到一个列表中并返回列表,将其保存为 SharedPreferences 并将其保存在一个静态变量中,但问题仍然存在。也许相关的提法是,问题发生在一个片段中,而其他的调用并没有返回一个对象列表,而只是返回了一个对象.谁能给我解释一下,为什么我会出现这个错误,如何解决?你真的会帮助一个坑爹的学生!编辑:这是我的Meeting POJO。

@Data
public class Meeting implements Serializable {

    private Integer id;

    private Long meetingDate;

    private Boolean deleted;

    private String location;

    private MeetingType meetingType;

    private String title;

    private List<User> participants;

    private String description;

}

我也尝试过获取一个JSONArray,但我得到了同样的问题:在onResponse方法中可见,但在解析后不可见,这是现在的样子。

AndroidNetworking.get(LOCALHOST + "/meeting?meetingId={meetingid}")
                .addPathParameter("meetingid", String.valueOf(meeting.getId()))
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        if (response == null)
                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        else {
                            JSONObject jsonObject;
                            Gson gson = new Gson();

                            for (int i=0; i<response.length();i++)
                            {
                                try {
                                    jsonObject = response.getJSONObject(i);
                                    User user = gson.fromJson(jsonObject.toString(), User.class);
                                    users.add(user);

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        }

                    }

                    @Override
                    public void onError(ANError anError) {

                        Log.println(Log.ERROR, "GETMEETINGPARTICIPANTS", "Error while trying to get participants for meeting");

                    }
                });

我的方法是在 onCreateView 方法。

android android-studio android-fragments
1个回答
0
投票

假设你的工作与Json。这就是你的问题。"其他调用没有返回一个对象列表,而只是返回一个对象。" 你需要使用jsonarray,然后在数组中循环并解析对象.看这里,

AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
    .addPathParameter("pageNumber", "0")
    .addHeaders("token", "1234")
    .setPriority(Priority.LOW)
    .build()
    .getAsJSONArray(new JSONArrayRequestListener() {
    @Override
        public void onResponse(JSONArray response) {
                  // do anything with response
                }

0
投票

我找到了一个解决我的问题的方法。很明显,我的Rest调用方法是在设置了我的TextViews之后才被调用的 尽管它是在设置者之前被调用的。我想这是因为异步调用的缘故。我在onResponse方法里面设置了文本视图的文本,解决了我的问题。我不相信这是正确的解决方案,但这是目前一个很好的变通方法。

AndroidNetworking.get(LOCALHOST + "/meeting?meetingId={meetingid}")
                .addPathParameter("meetingid", String.valueOf(id))
                .setPriority(Priority.LOW)
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        if (response == null)
                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        else {
                            JSONObject jsonObject;
                            Gson gson = new Gson();

                            for (int i=0; i<response.length();i++)
                            {
                                try {
                                    jsonObject = response.getJSONObject(i);
                                    User user = gson.fromJson(jsonObject.toString(), User.class);
                                    users.add(user);

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                            show_participants.setText(getParticipantsName(users)); //this worked for me

                            Log.println(Log.INFO, "GETMEETINGPARTICIPANTS", "No participants found for this meeting");
                        }

                    }

                    @Override
                    public void onError(ANError anError) {

                        Log.println(Log.ERROR, "GETMEETINGPARTICIPANTS", "Error while trying to get participants for meeting");

                    }
                });
© www.soinside.com 2019 - 2024. All rights reserved.