Java在進行網路傳輸的過程中的奇技淫巧
阿新 • • 發佈:2019-01-22
今天,翻書的時候看到書上的網路傳輸資料的時候,頓時感覺之前的自己的操作太low了,這篇主要講,在網路傳輸的過程中,你傳送請求,但是你現在介面又需要根據返回的資料來更新介面,但資料什麼時候返回你又不知道,這時候該怎麼辦?之前我直接在主執行緒裡面一個死迴圈判斷接受資訊是否為空讓其等待,可能一直網好所有很少導致ANR問題,
書上說的就是採用Java的回撥機制,看Java回撥機制參考
現在寫程式碼實現,採用介面回撥
//先定義一個介面
public interface Http_callback{
void finish(String response);
void Erro(Exception e);
}
//現在寫操作類,以http為例
public class HttpUtill{
public static void sendMessage(final String url,
final Http_callback call){
new Thread(new Runnable(){
try{
URL u= new URL(url);
HttpURLConnection connection = (HttpURLConnection)u.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000 );
connection.setReadTimeout(5000);
connection.setDoinput(true);
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder buidler = new StringBuilder();
String line;
while ((line = reader.readLine())!=null){
builder.append(line);
}
if(listener!=null){ //回掉onFinish方法
listener.onFinish(builder.toString());
}
}catch(Exception e){
if(listener!=null){
listener.Erro(e);
}
}}).start();
}
}
//實際用的過程中只需要
HttpUtil.sendMessage(url, new Http_callback(){
@Override
public void onFinish(String response){
//這裡的response就是接受到的資訊
}
@Override
public void Errro(Exception e){
//處理異常錯誤!
}
});