AsynTask 原理

Android异步任务解析

http://blog.youkuaiyun.com/cike110120/article/details/20061063

/**
*
* 类的用处:练习异步
* @author 巩雨松
* @date 2017/8/3
*/
public class MainActivity extends AppCompatActivity {
//声明全局变量快捷键是ctrl+alt+f
private TextView text;
private ArrayList list;
//接口地址
private String path = “”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList();
//找到控件
kongjian();
//得到路径准备解析
getServiceData();

}
//对网上的路径进行解析
private void getServiceData() {
    //要想异步首先声明异步的对象
    MyAsyncTask myAsyncTask = new MyAsyncTask();
    //执行任务
    myAsyncTask.execute(path);
}

private void kongjian() {
    text = (TextView)findViewById(R.id.tv_title);
}
//写一个异步的类
//是抽象类
public class MyAsyncTask extends AsyncTask<String,Integer,String>{


    //onPreExecute方法运行在主线程 在doinBackgrund之前准备工作

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Toast.makeText(MainActivity.this,"正在加载数据请等待",0).show();
    }


    //重写的抽象方法
    //方法运行在子线程 做耗时操作
    @Override
    protected String doInBackground(String... strings) {

        //获取接口地址
        String url = strings[0];
        //创建网络请求对象
        HttpClient client = new DefaultHttpClient();
        //创建请求的方式
        HttpGet get = new HttpGet(url);
        //通过网络请求对象执行请求
        try {
            HttpResponse response = client.execute(get);
            //判断响应码
            if(response.getStatusLine().getStatusCode()==200){
                //得到输入流
                InputStream inputStream = response.getEntity().getContent();
                //定义一个字节数组输出流
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                //创建字节接收数据
                byte[] buffer = new byte[1024];
                //数组的长度
                int len = 0;
                //循环存入输出流中
                while((len = inputStream.read(buffer))!=-1){
                    bos.write(buffer,0,len);
                }
                String json = bos.toString();
                return json;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //onProgressUpdate 方法运行在主线程 更新进度
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    //onProExecute 方法运行在主线程 用于更新UI

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Log.i("xxx",s.toString());
        try {
            JSONObject js=new JSONObject(s);
            JSONArray ja = js.getJSONArray("data");

            for (int i =0;i<ja.length();i++){
                JSONObject js2 = ja.getJSONObject(i);
                String createTime = js2.getString("createTime");
                Log.i("xxx",createTime);
                String headImg = js2.getString("headImg");
                String phone = js2.getString("phone");
                String title = js2.getString("title");
                String content = js2.getString("content");
               //封装成对象
                User user = new User();
                user.setCreateTime(createTime);
                user.setHeadImg(headImg);
                user.setPhone(phone);
                user.setTitle(title);
                user.setContent(content);
                list.add(user);
            }
            text.setText(list.toString());

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值