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.

原文地址:https://www.cnblogs.com/hxb2016/p/6143664.html