Android最基本的异步网络请求框架

2019-12-10 18:15:57刘景俊
这篇文章主要为大家详细介绍了Android最基本的异步网络请求框架,感兴趣的小伙伴们可以参考一下  

 本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关知识。由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家。

1. 同步网络请求

    以HTTP的GET请求为例,我们来介绍一下Android中一个基本的同步请求框架的实现。直接贴代码:

public class HttpUtils {
 public static byte[] get(String urlString) {
  HttpURLConnection urlConnection = null;
  try {
   URL url = new URL(urlString);
   urlConnection = (HttpURLConnection) url.openConnection();
   //设置请求方法
   urlConnection.setRequestMethod("GET");
   //设置超时时间
   urlConnection.setConnectTimeout(5000);
   urlConnection.setReadTimeout(3000);

   //获取响应的状态码
   int responseCode = urlConnection.getResponseCode();
   if (responseCode == 200) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    InputStream in = urlConnection.getInputStream();
    byte[] buffer = new byte[4 * 1024];
    int len = -1;
    while((len = in.read(buffer)) != -1) {
     bos.write(buffer, 0, len);
    }
    close(in);
    byte[] result = bos.toByteArray();
    close(bos);
    return result;
   } else {
    return null;
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (urlConnection != null) {
    urlConnection.disconnect();
   }
  }

  return null;
 }

 private static void close(Closeable stream) {
  if (stream != null) {
   try {
    stream.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

} 

    相信以上的代码我们大家都不陌生,以上代码就实现了基本的同步网络请求功能,get 方法会返回一个byte[]数组,后续我们可以根据返回的相应类型(文本或图片)对这个字节数组作进一步处理。 

2. 异步网络请求

    通常一个异步HTTP GET请求是这样的:发出get方法的调用后,相关任务会在后台线程中自动执行,而我们在主线程中继续处理其他工作,它成功获取GET请求的响应时,就会回调onSuccess方法。最直接的写法通常如下所示: