如何解决Android Studio中的Java对象,由Call to Rest API构造
我正在Android Studio中编写一个可通知用户火车时间的应用。我有一个名为journey的类,我的想法(不确定是不是正确的方法,因为我是Java和Android开发的新手)是根据API返回的响应来设置属性。对该API的调用可以正常工作,并且我可以设置属性,但是我该如何设置它,以便调用类可以进行监听,直到完成对API的调用并完全加载属性为止。
我目前拥有的代码如下:
public journey(String startCode,String endCode,Activity activity) {
//Connect to the API and set up the journey object
updatejourney(startCode,endCode,activity);
}
public void updatejourney(String startCode,final String endCode,Activity activity) {
queue = Volley.newRequestQueue(activity);
final journey journeyClass = this;
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,URL_LEFT + URL_START + startCode + URL_DEST + endCode,null,new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d("Response",response.toString());
if (response.length() != 0) {
try {
JSONObject returnedjourney = response.getJSONObject(0);
journeyClass.setStartCode(returnedjourney.getString("station"));
journeyClass.setEndCode(endCode);
JSONArray services = returnedjourney.getJSONArray("services");
JSONObject firstService = services.getJSONObject(0);
journeyClass.setDepartTime(firstService.getString("depfriendly"));
journeyClass.setArriveTime(firstService.getString("arrfriendly"));
journeyClass.setStatus(firstService.getString("schedule_status"));
Log.d("journey arrival",journeyClass.getArriveTime());
} catch (JSONException e) {
e.printstacktrace();
}
} else {
//Returned response is empty - deal wth
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Todo: Handle error
//Log.d("URL",URL_LEFT + URL_START + startCode + URL_DEST + endCode);
VolleyLog.d("error",error.getMessage());
error.printstacktrace();
}
});
queue.add(jsonArrayRequest);
}
关于这件事可能有固定的解决方法,但是就像我说的那样,我对此很陌生。我已经在网上搜索过,但还不太确定如何在Java中执行此操作。我不确定设置类的实例是否正确,但这就是我从内部类中设置属性的方式。
更新:
我正在侦听器中使用以下内容,看来它可能正在工作。我将需要整理所有代码,如果可以作为解决方案,则稍后再获取。接下来的8个小时我必须去上班。
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
TextView station = getActivity().findViewById(stationFieldId);
station.setText(stationName);
TextView timeField = getActivity().findViewById(timeFieldId);
timeField.setText(journey.getDepartTime());
}
});
解决方法
这是我最后使用的对我有用的代码。我已经编辑了很多与UI元素有关的内容,其中包括设置TextViews的部分。
private void getJourneyAndDisplay(String startCode,final String destCode,final String stationName,final int stationFieldId,final int timeFieldId,final int statusFieldId,final boolean out) {
queue = Volley.newRequestQueue(getActivity());
journey = new Journey();
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,Journey.URL_LEFT + Journey.URL_START + startCode + Journey.URL_DEST + destCode,null,new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
if (response.length() != 0) {
try {
//Make panel visible as it has returned results
panel.setVisibility(View.VISIBLE);
JSONArray services = returnedJourney.getJSONArray("services");
if (services.length() > 0) {
//Journey object is configured
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Activity act = getActivity();
TextView station = act.findViewById(stationFieldId);
station.setText(stationName);
TextView timeField = act.findViewById(timeFieldId);
timeField.setText(journey.getDepartTime());
TextView statusField = act.findViewById(statusFieldId);
statusField.setText(journey.getStatus());
}
});
} else {
//Deal iwth no joruney
}
} catch (JSONException e) {
//Display message to inform user that the data cannot be retrieved
}
} else {
//Returned response is empty
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Handle reponse
}
});
queue.add(jsonArrayRequest);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。