【发布时间】:2021-05-27 22:17:56
【问题描述】:
当 okhttp 客户端从 API 获取响应时,我想在我的 Android 应用界面上显示加载图标/栏。现在它在数据加载之前只是一个空白屏幕,但是我想在数据完全加载之前显示一个加载图标。下面是我的 okhttp 函数的代码。我应该将代码的哪一部分准确添加到加载栏/图标中,我该怎么做?
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();
}
}
});
}
});
【问题讨论】:
-
就在
client.newCall(request).enqueue之前,然后隐藏它 onFailure/onResponse 是您使用它的地方,构建您想要展示的东西,有很多可用资源 -
我想要一个 Activity 本身的加载器,而不是一个对话框,这可能吗?
-
是的,添加就行了
标签: java android multithreading asynchronous okhttp