我正在androidstudio中编写一个应用程序,通知用户火车时刻。我有一个名为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());
}
});
1条答案
按热度按时间uubf1zoe1#
这是我最后使用的代码,对我很有用。我已经编辑了它对ui元素所做的很多工作,以包括它设置textview的部分