我是使用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
方法。
假设你的工作与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
}
我找到了一个解决我的问题的方法。很明显,我的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");
}
});