接口回调经典案例--网络请求回调
2015-10-22 23:45
633 查看
形象比喻:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。(来自知乎)回调的好处:
降低代码的耦合性,使代码更灵活、简洁步骤一 :定义回调接口
/** * Created by pengkv on 15/10/22. * 网络请求回调接口 */ public interface HttpCallBackListener { void onFinish(String respose); void onError(Exception e); }
步骤二:定义回调函数(将接口作为参数)
/** * Created by pengkv on 15/10/22. * 网络请求工具类 */ public class HttpUtil { public static void requestData(final String urlStr, final HttpCallBackListener listener) { new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.setDoInput(true); connection.setDoOutput(true); InputStream in = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } if (listener != null) { //回调onFinish方法 listener.onFinish(sb.toString()); } } catch (Exception e) { if (listener != null) { //回调onError方法 listener.onError(e); } } finally { if (connection != null) { connection.disconnect(); } } } }).start(); } }
步骤三:使用回调方法一
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HttpUtil.requestData("请求的网址", new HttpCallBackListener() { @Override public void onFinish(String respose) { //处理请求 } @Override public void onError(Exception e) { //处理异常 } }); } }
步骤三:使用回调方法二
public class MainActivity extends AppCompatActivity implements HttpCallBackListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HttpUtil.requestData("请求的网址", this); } @Override public void onFinish(String respose) { //处理请求 } @Override public void onError(Exception e) { //处理异常 } }
相关文章推荐
- apache下开启ssl访问,即https
- tcp/心跳包
- Kali Linux 安装完成后的网络配置
- iOS学习笔记网络篇之数据解析(JSON/XML)
- 网络通信-前言
- iOS学习笔记网络篇之HTTP
- 系统管理及umask
- TCP协议中的三次握手和四次挥手(图解)
- Thinkd Pad打开无线网络方法
- HTTP状态码
- http 中get和post
- HttpClient 教程 (一)
- http中get和post的区别
- 网络编程(1)--FloodAck
- HDU 5462 Manors (2015年沈阳赛区网络赛M题)
- HTTP权威指南学习笔记
- Linux虚拟机设置网络、实现主机名ssh访问
- heartbeatV2 haresources 简单实现httpd服务高可用
- 《TCP/IP详解 卷一》读书笔记-----TCP连接建立
- 开源网络框架Volley(3)