开线程池在子线程下载,用接口回调与Handler返回结果

来源:互联网 发布:淘宝客怎么推广产品 编辑:程序博客网 时间:2024/06/05 11:10

(1)定义一个接口,用于返回结果

public interface DataBack {public void passData(byte[] result);}

(2)定义一个类,用户封装下载操作

public class HttpUtils {// 开线程池private static Executor executor = Executors.newFixedThreadPool(4);// 使用接口回调private DataBack dataBack;// 使用handle发、接信息private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {if(msg.what == 411){dataBack.passData((byte[]) msg.obj);}};};public void getDataFromServer(final String uri, DataBack dataBack) {this.dataBack = dataBack;// 执行线程池executor.execute(new Runnable() {@Overridepublic void run() {HttpClient client = new DefaultHttpClient();try {HttpResponse response = client.execute(new HttpGet(uri));if (response.getStatusLine().getStatusCode() == 200) {byte[] result = EntityUtils.toByteArray(response.getEntity());// 从子线程发送结果数据到主线程Message msg = new Message();msg.what = 411;msg.obj = result;handler.sendMessage(msg);}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}});}}

(3)写完一个功能记得要先测试

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 测试测试new HttpUtils().getDataFromServer(ServerApi.HAND_URI, new DataBack() {@Overridepublic void passData(byte[] result) {String json = new String(result);Log.v("TAG", json);//Toast.makeText(MainActivity.this, json, 0).show();}});}}


0 0
原创粉丝点击