安卓开发接口回调经典案例网络请求
Posted zy9011
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发接口回调经典案例网络请求相关的知识,希望对你有一定的参考价值。
在android中到处可见接口回调机制,尤其是UI事件处理方面。然后一般刷新ui的处理:广播,接口回调,handle或者使用eventbus或是otto,总的来说也就是个监听模式的使用吧。
回调函数解释
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
形象比喻:
下面举个通俗的例子:
比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口,张三和李四都实现了这个“接口”,闹铃到一定时间后就要“响铃”,响铃就要发出“铃声”,“铃声”就去叫人,至于人会做什么就是人本身的事情。
使用注意
在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误。
回调的好处:
降低代码的耦合性,使代码更灵活、简洁
步骤一 :定义回调接口
/**
*
* 网络请求回调接口
*/
public interface HttpCallBackListener
void onSuccess(String respose);
void onError(Exception e);
步骤二:定义回调函数(将接口作为参数)
/**
* 网络请求工具类
*/
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.onSuccess(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 onSuccess(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 onSuccess(String respose)
//处理请求
@Override
public void onError(Exception e)
//处理异常
就写到这,哈哈,这都是网络框架里面的一般套路,套路玩的深不深就看自己功夫了。
以上是关于安卓开发接口回调经典案例网络请求的主要内容,如果未能解决你的问题,请参考以下文章