java 介面回撥經典案例--網路請求回撥
形象比喻:
你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的電話,過了幾天店裡有貨了,店員就打了你的電話,然後你接到電話後就到店裡去取了貨。在這個例子裡,你的電話號碼就叫回撥函式,你把電話留給店員就叫登記回撥函式,店裡後來有貨了叫做觸發了回撥關聯的事件,店員給你打電話叫做呼叫回撥函式,你到店裡去取貨叫做響應回撥事件。(來自知乎)
回撥的好處:
降低程式碼的耦合性,使程式碼更靈活、簡潔
步驟一 :定義回撥介面
/**
* 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) {
//處理異常
}
}
轉載自:介面回撥經典案例--網路請求回撥
相關文章
- 微博回撥介面
- js 幾種網路請求方式梳理——擺脫回撥地獄JS
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- [JS]回撥函式和回撥地獄JS函式
- Java_介面回撥與匿名內部類Java
- java 回撥函式示例Java函式
- 回撥方法
- Activity生命週期回撥是如何被回撥的?
- java回撥函式機制Java函式
- 網路回撥:Block和Delegate的對比BloC
- 非同步/回撥非同步
- js 回撥 callbackJS
- 回撥函式函式
- 回撥地獄
- C++回撥C++
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP
- java閉包和回撥淺析Java
- JavaScript 回撥函式JavaScript函式
- JavaScript回撥函式JavaScript函式
- JS—回撥函式JS函式
- 回撥函式(CallBack)函式
- 【詳細、開箱即用】.NET企業微信回撥配置(資料回撥URL和指令回撥URL驗證)
- 淺析微信支付:申請退款、退款回撥介面、查詢退款
- 【JavaSE】java實現閉包與回撥Java
- ajax--實現非同步請求,接受響應及執行回撥非同步
- 如何避免回撥地獄
- 函式回撥(C++)函式C++
- 回撥函式的作用函式
- Python/OpenCV:回撥函式PythonOpenCV函式
- TLS回撥函式(Note)TLS函式
- C++屌屌的觀察者模式-同步回撥和非同步回撥C++模式非同步
- java高階用法之:JNA中的回撥Java
- Android之無法回撥onActivityResultAndroid
- Bean 的生命週期回撥Bean
- 回撥和spring的LambdaSafe類Spring
- JS之回撥函式(callback)JS函式
- C++回撥函式 用法C++函式
- Windows核心驅動-程序回撥Windows