Android AsyncTask异步任务(二)
之前我们讲过了AsyncTask 的生命周期(onPreExecute-->doInBackground-->onProgressUpdate-->onPostExecute),今天我们就来写一个模拟AsyncTask获取数据库/网络数据。
三军未动,粮草先行
mian_activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.test1.MainActivity" > <Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点我看数据"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/barNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ListView
android:visibility="gone"
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </LinearLayout>
再创建一个layout Xml -->items.xml 用来填充ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/>
<TextView
android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/> </LinearLayout>
Ui线程-MainActivity
public class MainActivity extends Activity {
private BaseAdapter adapter;
private ListView lv;
private List<User> userlist =new ArrayList<User>();
private MyTask task ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
lv = (ListView) findViewById(R.id.listView1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lv.setVisibility(View.VISIBLE);
lv.setAdapter(adapter);
task = new MyTask(MainActivity.this);
task.execute(userlist,adapter);
}
});
adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
View view;
if(convertView==null){
view = inflater.inflate(R.layout.items, null);
}else{
view = convertView;
}
User user = userlist.get(position);
Log.i("userlist", ""+userlist.size()+user);
TextView name = (TextView) view.findViewById(R.id.name);
TextView age = (TextView) view.findViewById(R.id.age);
TextView desc = (TextView) view.findViewById(R.id.desc);
name.setText( user.getName() );
age.setText(user.getAge()+"");
desc.setText(user.getDesc());
return view;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public int getCount() {
return userlist.size();
}
};
}
}
AsyncTask-->MyTask
public class MyTask extends AsyncTask{
private List<User> userlist;
private BaseAdapter adapter;
private MainActivity activity;
private String barNum;
public MyTask(MainActivity activity) {
this.activity = activity;
}
@Override
protected Object doInBackground(Object... params) {
userlist = (List<User>) params[0];
adapter = (BaseAdapter) params[1];
for(int i=0 ;i<=100;i++){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
userlist.add(new User("zhangsan"+i,18+i,"aa"+i+"aa"));
publishProgress(i);
barNum = i+"%";
}
return userlist;
}
@Override
protected void onProgressUpdate(Object... values) {
Button btn = (Button) activity.findViewById(R.id.button1);
btn.setVisibility(View.GONE);
TextView num = (TextView) activity.findViewById(R.id.barNum);
int bar = Integer.parseInt(values[0].toString());
ProgressBar progressBar = (ProgressBar) activity.findViewById(R.id.seekBar1);
progressBar.setProgress(bar);
num.setText(barNum);
adapter.notifyDataSetChanged();
}
}
Ok,运行看效果:


谢谢大家的支持。The human race has one really effective weapon, and that is laughter.
Android AsyncTask异步任务(二)的更多相关文章
- android AsyncTask异步下载并更新进度条
AsyncTask异步下载并更新进度条 //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...
- Android AsyncTask异步加载WebAPI
之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncT ...
- Android --AsyncTask异步任务(一)
1.为什么要异步任务 Android单线程模式 耗时操作放在非主线程(UI线程)中执行 我们都知道Android是单线程模式,只有主线程才能对UI操作,简称UI线程.当然这样的好处是:保证UI的稳定性 ...
- Android AsyncTask 异步任务操作
1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- android AsyncTask异步任务(笔记)
AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...
- Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...
- Android:异步处理之AsyncTask的应用(二)
前言 在上一篇文章中<Android:异步处理之Handler+Thread的应用(一)>,我们知道Android的UI主线程主要负责处理用户的按键事件.用户的触屏事件以及屏幕绘图事件等: ...
- Android异步处理二:使用AsyncTask异步更新UI界面
在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简 ...
- Android 多线程----AsyncTask异步任务详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
随机推荐
- java中异常抛出后代码是否会继续执行
为了回答这个问题,我编写了几段代码测试了一下,结果如下: 代码1:throw new Exception("参数越界"); System.out.println(" ...
- Vim插件管理器Vundle使用
参考地址:http://www.linuxidc.com/Linux/2012-12/75684.htm Vundle(Vim bundle) 是一个vim的插件管理器. 其Github地址为: ht ...
- 百度app测试服务
https://cloud.baidu.com/product/mat.html?t=cp:ct|pp:fcforbce242jrcs|cn:fcforbce242|pu:newAATJRKWS002 ...
- 【OS】分页和分段
在网上找到了一个比较形象的比喻 打个比方,比如说你去听课,带了一个纸质笔记本做笔记.笔记本有100张纸,课程有语文.数学.英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择. ...
- JavaWeb 自定义404页面
本来,Tomcat中自定义404页面不过是在web.xml文件中写4行代码的事情. 直接引用 Tomcat官方FAQ 怎样自定义404页面? 编辑web.xml <error-page> ...
- CSS创造三角形的原理
其实就是利用了div各方向border的接驳点产生的斜线的特点,知道原理后就不觉得有多不可思议了.. .triangle_up { height: 0px; width: 0px; border-bo ...
- jQuery对象与dom对象的转换
一直以来对于通过jQuery方式获取的对象使不能直接使用JavaScript的一些方法的,开始的时候不理解,现在此案知道,原来jQuery获得的对象并不和我们平时使用getElementById获得的 ...
- mysql 批量插入数据存储过程
create procedure pFastCreateNums (cnt int unsigned) begin declare s int unsigned default 1; truncate ...
- 告别IT,出售多年自己研发的股票分析系统源码
不知已过而立,发狠告别IT,回头看看以前自己的多个作品,耗时最多的就是这个股票分析系统了,留在自己的电脑里也体现不出多大价值了,故打算出售源码给需要的人,联系方式QQ:874724605 注明:股票源 ...
- MVB设备分类
连接在MVB上的设备按性能可以分为5类 MVB上的设备应具备下面六个性能中的一个或多个. MVB设备的性能 性能 说明 分类 设备状态 设备被轮询时能够发送出其设备状态 1,2,3,4,5 过程数据 ...