当okhttp从Android中的api获取数据时,如何显示加载icon/bar?
How to show a loading icon/bar when okhttp is fetching data from the api in Android?
当 okhttp 客户端从 API 获取响应时,我想在我的 Android 应用程序界面上显示正在加载 icon/bar。现在它只是数据加载前的一个空白屏幕,但是我想在数据完全加载之前显示一个加载图标。下面是我的 okhttp 函数的代码。我应该在加载中准确添加代码的哪一部分 bar/icon 我该怎么做?
private void doGetRequest(String[] time_duration) {
OkHttpClient client = new OkHttpClient();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(10, TimeUnit.MINUTES)
.writeTimeout(10, TimeUnit.MINUTES)
.readTimeout(10,TimeUnit.MINUTES);
client = builder.build();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()) {
try {
String jsonData = response.body().string();
JSONObject Jobject = new JSONObject(jsonData);
JSONArray jarray = Jobject.getJSONArray("Flights");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
}
}
} catch (Exception e) {
e.printStackTrace();
}
DeparturesActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < departure_flights.size(); i++) {
String departure_date = departure_flights.get(i).getString("FldaDT");
String flight_number = departure_flights.get(i).getString("Flno");
}
flightItems.add(new FlightItem(strDate, flight_number));
}
mAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});
在 xml 布局中定义一个进度条并将其可见性设置为 gone ,并在开始调用 api 之前的行将其可见性设置为可见,如:
progressBar.setVisibilty(View.VISIBLE);
最后,当 api 调用结束时,将其在 onResponse()
或 onFailure()
上的可见性设置为再次消失,如:
progressBar.setVisibilty(View.GONE);
当 okhttp 客户端从 API 获取响应时,我想在我的 Android 应用程序界面上显示正在加载 icon/bar。现在它只是数据加载前的一个空白屏幕,但是我想在数据完全加载之前显示一个加载图标。下面是我的 okhttp 函数的代码。我应该在加载中准确添加代码的哪一部分 bar/icon 我该怎么做?
private void doGetRequest(String[] time_duration) {
OkHttpClient client = new OkHttpClient();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(10, TimeUnit.MINUTES)
.writeTimeout(10, TimeUnit.MINUTES)
.readTimeout(10,TimeUnit.MINUTES);
client = builder.build();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()) {
try {
String jsonData = response.body().string();
JSONObject Jobject = new JSONObject(jsonData);
JSONArray jarray = Jobject.getJSONArray("Flights");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
}
}
} catch (Exception e) {
e.printStackTrace();
}
DeparturesActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < departure_flights.size(); i++) {
String departure_date = departure_flights.get(i).getString("FldaDT");
String flight_number = departure_flights.get(i).getString("Flno");
}
flightItems.add(new FlightItem(strDate, flight_number));
}
mAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});
在 xml 布局中定义一个进度条并将其可见性设置为 gone ,并在开始调用 api 之前的行将其可见性设置为可见,如:
progressBar.setVisibilty(View.VISIBLE);
最后,当 api 调用结束时,将其在 onResponse()
或 onFailure()
上的可见性设置为再次消失,如:
progressBar.setVisibilty(View.GONE);