zoukankan      html  css  js  c++  java
  • Android学习之多线程开发总结<二>

    package com.example.test;
    
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import android.content.Context;
    import android.os.AsyncTask;
    import android.util.Log;
    
    public class TestAsyncTask extends AsyncTask<String, Integer, String> {
        private static final String TAG = TestAsyncTask.class.getSimpleName();
        
        private Context ctx;
        AsyncTaskCallback cb = null;
    
        public static final int PRE_EVENT = 1;
        public static final int POST_EVENT = 2;
        public static final int CACEL_EVENT = 3;
    
        public static interface AsyncTaskCallback {
            // 显示结果
            void onAsyncResult(int e, String s);
    
            // 显示进度条
            void onAsyncProcess(Integer pi);
        }
    
        public TestAsyncTask(Context ctx, AsyncTaskCallback cb) {
            super();
            this.ctx = ctx;
            this.cb = cb;
        }
    
        @Override
        protected void onPreExecute() {
            Log.i(TAG, "onPreExecute called");
            cb.onAsyncResult(PRE_EVENT, "loading...");
        }
    
        // doInBackground方法内部执行后台任务
        @Override
        protected String doInBackground(String... params) {
            Log.i(TAG, "doInBackground called: params : " + params[0]);
            try {
                HttpClient client = new DefaultHttpClient();
                HttpGet get = new HttpGet(params[0]);
                HttpResponse response = client.execute(get);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    HttpEntity entity = response.getEntity();
                    InputStream is = entity.getContent();
                    long total = entity.getContentLength();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buf = new byte[512];
                    int count = 0;
                    int length = -1;
                    while ((length = is.read(buf)) != -1) {
                        baos.write(buf, 0, length);
                        count += length;
                        // 调用publishProgress公布进度,最后onProgressUpdate方法将被执行
                        publishProgress((int) ((count / (float) total) * 100));
                        // 为了演示进度条,休眠100毫秒
                        Thread.sleep(100);
                    }
                    return new String(baos.toByteArray(), "utf-8");
                }
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            return null;
        }
        
        @Override
        protected void onPostExecute(String result) {
            Log.i(TAG, "onPostExecute called: result : " + result);
            cb.onAsyncResult(POST_EVENT, result);
        }
    
        @Override
        protected void onCancelled() {
            Log.i(TAG, "onCancelled called");
            cb.onAsyncResult(CACEL_EVENT, "cancle...");
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            Log.i(TAG, "onProgressUpdate called progress:" + values[0]);
            cb.onAsyncProcess(values[0]);
        }
    }
    AsyncTaskCallback cb = new AsyncTaskCallback() {    
            @Override  
            public void onAsyncResult(int e, String s) {  
                Log.i(TAG, "onAsyncResult event:" + e + " result:" + s);  
                Message msg = Message.obtain();  
                msg.what = 1;  
                msg.arg1 = e;  
                msg.obj = (Object) s;  
                testH.sendMessage(msg);  
            }  
      
            @Override  
            public void onAsyncProcess(Integer pi) {  
                Message msg = Message.obtain();  
                msg.what = 2;  
                msg.obj = (Object) pi;  
                testH.sendMessage(msg);  
            }  
    };  
  • 相关阅读:
    jmeter的断言
    Fiddler(五)设置显式IP地址
    学习pycharm----自动化接口
    fidder重复创建数据+模拟接口响应数据+fidder接口测试
    python网络/并发编程部分简单整理
    python面向对象部分简单整理
    python模块与包简单整理
    python函数部分整理
    Python基础部分整理
    Scheme Implementations对比
  • 原文地址:https://www.cnblogs.com/shuaiwen/p/3504041.html
Copyright © 2011-2022 走看看