引自免费微信小程序:皆我百晓生
在HarmonyOS上,我们可以使用@ohos.network.HttpClient进行网络请求,并且可以通过创建自定义对话框来实现loading效果。这里我会提供一个基本的示例,展示如何在AxiosRequest类中封装显示和隐藏加载对话框的方法。
首先,我们需要导入必要的包:
import ohos.app.Context;
import ohos.app.Dialog;
import ohos.app.Layout;
import ohos.ui.common.LinearGravity;
import ohos.ui.flat.Button;
import ohos.ui.flat.FlatLinearLayout;
import ohos.ui.flat.FlatUIComponent;
import ohos.ui.model.Text;
接下来,我们创建一个名为LoadingDialog的内部类,用于表示加载对话框:
private class LoadingDialog extends Dialog {
private Text loadingText;
public LoadingDialog(Context context) {
super(context);
initLayout();
}
private void initLayout() {
Layout layout = new FlatLinearLayout(getContext(), LinearGravity.CENTER, LinearGravity.CENTER);
layout.setPadding(30, 30, 30, 30);
loadingText = new Text(getContext());
loadingText.setText("正在加载...");
loadingText.setTextSize(24);
loadingText.setTextColor("#ffffff");
loadingText.setAlignment(Layout.Alignment.CENTER);
Button cancelButton = new Button(getContext());
cancelButton.setText("取消");
cancelButton.setOnAction(new Runnable() {
@Override
public void run() {
dismiss();
}
});
layout.addComponent(loadingText);
layout.addComponent(cancelButton);
setRootComponent(layout);
}
}
现在我们在AxiosRequest类中添加显示和隐藏加载对话框的方法:
public class AxiosRequest {
private Context context;
public AxiosRequest(Context context) {
this.context = context;
}
// 显示加载对话框
public void showLoadingDialog() {
LoadingDialog dialog = new LoadingDialog(context);
dialog.show();
}
// 隐藏加载对话框
public void hideLoadingDialog() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
// 进行网络请求的方法
public void makeNetworkRequest() {
// 在此方法内进行网络请求,例如使用HttpClient
// 在请求开始时调用showLoadingDialog()
showLoadingDialog();
HttpClient client = new HttpClient();
HttpRequest request = new HttpRequest("https://api.example.com/data", HttpMethod.GET);
// 添加回调,在请求成功、失败或取消时调用hideLoadingDialog()
client.send(request, new HttpResponseCallback() {
@Override
public void onReceived(HttpResponse response) {
hideLoadingDialog();
// 处理响应数据
}
@Override
public void onError(int code, String description) {
hideLoadingDialog();
// 处理错误
}
@Override
public void onCancel() {
hideLoadingDialog();
// 取消操作
}
});
}
}
在这个例子中,我们创建了一个AxiosRequest类,它包含了显示和隐藏加载对话框的方法。当进行网络请求时,首先调用showLoadingDialog(),然后发送请求,并在请求完成(无论成功还是失败)后调用hideLoadingDialog()。这样可以确保在等待网络响应期间,始终有一个加载对话框可见。
