Java在进行网络传输的过程中的奇技淫巧

今天,翻书的时候看到书上的网络传输数据的时候,顿时感觉之前的自己的操作太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(call!=null){ //回掉onFinish方法
       call.onFinish(builder.toString());
    }
    }catch(Exception e){
      if(call!=null){
       call.Erro(e);
    }
 }}).start();
}
}


//实际用的过程中只需要
HttpUtil.sendMessage(url, new Http_callback(){
   @Override
   public void onFinish(String response){
   //这里的response就是接受到的信息
		}
	@Override
	public void Errro(Exception e){
   //处理异常错误!
    }
   });

你可能感兴趣的:(Java基础)