热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android实战:使用ProgressBar与AsyncTask实现数据异步加载

本文介绍如何利用ProgressBar和AsyncTask在Android应用中实现数据的异步加载。包括加载数据的不同状态下的UI展示,如加载中、加载成功及加载失败时的界面处理。

1 效果展示


使用ProgressBar与AsyncTask实现数据异步加载的效果图


加载数据过程中


使用ProgressBar与AsyncTask实现数据异步加载的效果图


数据加载完成后


使用ProgressBar与AsyncTask实现数据异步加载的效果图


2 实现详解


在加载开始前,界面上会显示一个异步加载的进度条,同时隐藏数据展示区域和加载失败提示区域。


当数据加载成功后,将根据获取的数据更新UI,显示相应的信息。


如果数据加载失败,则会显示加载失败的提示信息,并提供重试选项。


整个加载过程通过AsyncTask来管理,主要包括以下两个关键方法:


// 后台执行,用于从服务器加载数据


protected Integer doInBackground(String... params)


// 数据加载完成后,更新UI


protected void onPostExecute(Integer result)


3 代码实现


3.1 界面布局


加载进度条:



    android:id="@+id/pb_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />


加载失败提示:



    android:id="@+id/ll_error"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载失败,请重试。" />
android:id="@+id/btn_retry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重试" />


数据展示区域:



    android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">



3.2 后台逻辑


AsyncTask 类的定义和调用:



private class DataLoader extends AsyncTask {
@Override
protected Boolean doInBackground(Void... params) {
try {
// 模拟网络请求
Thread.sleep(2000);
return true; // 假设数据加载成功
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}

@Override
protected void onPostExecute(Boolean success) {
if (success) {
// 更新UI,显示数据
updateUIWithData();
} else {
// 显示加载失败提示
showLoadError();
}
}
}


调用AsyncTask:



new DataLoader().execute();


重试功能实现:



Button btnRetry = findViewById(R.id.btn_retry);
btnRetry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 重新显示加载进度条,隐藏错误提示
ProgressBar pbLoading = findViewById(R.id.pb_loading);
LinearLayout llError = findViewById(R.id.ll_error);
pbLoading.setVisibility(View.VISIBLE);
llError.setVisibility(View.GONE);
// 重新加载数据
new DataLoader().execute();
}
});


UI更新方法:



private void updateUIWithData() {
// 隐藏加载进度条,显示数据展示区域
ProgressBar pbLoading = findViewById(R.id.pb_loading);
LinearLayout llCOntent= findViewById(R.id.ll_content);
pbLoading.setVisibility(View.GONE);
llContent.setVisibility(View.VISIBLE);
// 更新具体数据
// 示例:假设有一个TextView用于显示用户名
TextView tvUsername = findViewById(R.id.tv_username);
tvUsername.setText("Qwen");
}


显示加载失败提示的方法:



private void showLoadError() {
// 隐藏加载进度条,显示错误提示区域
ProgressBar pbLoading = findViewById(R.id.pb_loading);
LinearLayout llError = findViewById(R.id.ll_error);
pbLoading.setVisibility(View.GONE);
llError.setVisibility(View.VISIBLE);
}


推荐阅读
  • 在上一期文章中,我们探讨了FastDev4Android项目中PullToRefreshListView组件的使用方法。本期将继续探讨该框架中的另一个重要组件——ACache数据缓存器,详细介绍其工作原理及如何在项目中有效利用。 ... [详细]
  • 本文详细介绍了 Android 开发中显式 Intent 和隐式 Intent 的区别及应用场景,包括如何通过显式 Intent 在同一应用内切换 Activity,以及如何利用隐式 Intent 实现跨应用的功能调用。 ... [详细]
  • 本文介绍了如何通过修改Android应用的配置文件和编写布局与Activity代码,利用DOM模式将用户输入的数据保存为XML文件。 ... [详细]
  • 使用URLHttpConnection获取并展示图片至ImageView的方法
    本文介绍如何通过URLHttpConnection方式从网络加载图片,并将其显示在Android应用的ImageView组件上。包括布局文件和Java代码的具体实现。 ... [详细]
  • 本文详细介绍了Java中`org.sakaiproject.site.api.Site.addPage()`方法的功能和使用方法,并提供了多个实际项目中的代码示例。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 本文详细介绍了Android平台上的动态加载技术,包括其定义、分类及具体实现步骤。通过动态加载技术,开发者可以在不更新应用的情况下,向用户推送新的功能或修复bug,从而提升用户体验。 ... [详细]
  • java学习日记对JFrame的操作
    设置背景图片、添加音乐、监控键盘、改变字体风格等等!importjava.applet.Applet;importjava.applet.AudioClip;importjava. ... [详细]
  • 本文探讨了在Android应用程序开发过程中动态管理Fragment的方法,包括动态添加和切换Fragment,以及如何实现平滑的过渡动画。文章通过一个具体的案例——订单管理系统,详细介绍了实现步骤和技术细节。 ... [详细]
  • 在使用 Android Fragment 兼容包时,可能会遇到 'The specified child already has a parent' 的异常。本文将详细解释这一错误的原因,并提供解决方案。 ... [详细]
  • 本文介绍如何创建一个简单的Android桌面小部件,通过显示两个文本框来展示基本功能。提供代码下载链接及详细步骤。 ... [详细]
  • 本文介绍了一种利用迭代法解决特定方程问题的方法,特别是当给定函数f(x)在区间[x1, x2]内连续且f(x1)0时,存在一个x~使得f(x~)=0。通过逐步细化搜索范围,可以高效地找到方程的根。 ... [详细]
  • 设计模式笔记12:迭代器模式(Iterator Pattern) ... [详细]
  • 本文介绍了NHibernate中通过定义接口和实现类来管理会话工厂的方法,包括接口的优势、模型文件夹的结构以及具体的代码示例。 ... [详细]
  • 本文探讨了一个特定的问题:当应用程序通过安装器启动后最小化,再次打开时,会触发窗口丢失错误,导致应用重启,并且之前的异步线程无法正常管理。这一现象在直接从应用图标启动时不会出现。 ... [详细]
author-avatar
请叫我姚灬小贱_______
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有