之前我们讲过了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异步任务(二)的更多相关文章

  1. android AsyncTask异步下载并更新进度条

    AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...

  2. Android AsyncTask异步加载WebAPI

    之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncT ...

  3. Android --AsyncTask异步任务(一)

    1.为什么要异步任务 Android单线程模式 耗时操作放在非主线程(UI线程)中执行 我们都知道Android是单线程模式,只有主线程才能对UI操作,简称UI线程.当然这样的好处是:保证UI的稳定性 ...

  4. Android AsyncTask 异步任务操作

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. android AsyncTask异步任务(笔记)

    AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...

  6. Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...

  7. Android:异步处理之AsyncTask的应用(二)

    前言 在上一篇文章中<Android:异步处理之Handler+Thread的应用(一)>,我们知道Android的UI主线程主要负责处理用户的按键事件.用户的触屏事件以及屏幕绘图事件等: ...

  8. Android异步处理二:使用AsyncTask异步更新UI界面

    在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简 ...

  9. Android 多线程----AsyncTask异步任务详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

随机推荐

  1. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  2. 哈希表(Hash Table)

    参考: Hash table - Wiki Hash table_百度百科 从头到尾彻底解析Hash表算法 谈谈 Hash Table 我们身边的哈希,最常见的就是perl和python里面的字典了, ...

  3. 采用MANIFEST.MF之jar报错ClassNotFoundException解法

    检查n多遍也试了n多次,证明下面是MANIFEST.MF文件正确写法: Manifest-Version: 1.0 Premain-Class: cn.yandz.monitor.SizeOfObje ...

  4. Unity学习笔记

    『 知识点』 [射线] 射线检测碰撞 『游戏实战』 个例 [E]<愤怒的小鸟> 资源 免费Unity基础教程(中文电子书) [E] noobtus(Unity游戏教程)

  5. 版本控制简介,git使用----使用GitHub托管代码

    关于版本控制: 很久以前,人们苦于对写过的代码进行版本的管理,经常过了一段时间想恢复原来写过的代码却又忘了不知道丢到哪儿去了,有的人用加上时间后缀来命名文件的方法,便于后期维护,但是这样做的麻烦也很大 ...

  6. IIS 7.5最新解析漏洞

    IIS7.5解析漏洞 http://www.cnk0n9.com/fckeditor/editor/fckeditor.html, 上传图片,浏览,上传一个aspx的一句话木马,名字为:a.aspx. ...

  7. gulp教程之gulp-rev-append

    简介: 使用gulp-rev-append给页面的引用添加版本号,清除页面引用缓存. 1.安装nodejs/全局安装gulp/项目安装gulp/创建package.json和gulpfile.js文件 ...

  8. Android开发--Android Studio配置

    1.常见问题 emulator: You might want to adjust your AVD RAM size and/or HAXM configuration to run in fast ...

  9. JAVA 多线程随笔 (二) sleep, yield, join, wait 和notify

    这里先说明一下锁对象,如果一个类比如Person里的方法都有synchronized来修饰,那么每一个方法的锁对象就是Person的一个实例person. 锁对象也可以针对某个特定的实例, 比如syn ...

  10. a链接中套a链接

    <a href="baidu.com"> <div> <div class="title">百度</div> & ...