Android6.0(API23)系统之后,Android上发送HTTP请求的方式只有一种HttpUrlConnection

基本用法:通过一个执行路径的URL,获取到HttpUrlConnection对象,然后就可以获取到服务器端的二进制数据,最后将二进制数据转为可以阅读的的数据。

public class HttpUrlConnectionActivity extends AppCompatActivity {private TextView tvShowNet;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvShowNet = (TextView) findViewById(R.id.tv_show);}public void http(View view) {//开启线程请求网络
        new Thread(new Runnable() {@Override
            public void run() {try {//1.创建URL对象(传入一个路径)
                    URL url = new URL("https://www.baidu.com/");//2. 获取HttpURLConnection对象
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();//3.设置请求方法(默认是GET,用来向服务器请求数据,POST用来向服务器提交数据)
                    connection.setRequestMethod("GET");//4.设置其他的参数,比如请求超时、读取超时毫秒数、服务器返回的状态码等等
                    connection.setConnectTimeout(5000);connection.setReadTimeout(5000);//状态码为200的时候,说明和服务器成功连接
                    int code = connection.getResponseCode();Log.i("--", "状态码:" + code);//5. 获取从服务器返回的输入流
                    if (code == 200) {InputStream in = connection.getInputStream();//6.对二进制流进行读取
                        BufferedReader br = new BufferedReader(new InputStreamReader(in));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {sb.append(line);}//显示数据
                        showURLText(sb.toString());}} catch (Exception e) {e.printStackTrace();} finally {}}}).start();}private void showURLText(final String s) {runOnUiThread(new Runnable() {@Override
            public void run() {tvShowNet.setText(s);}});}
}

当然我们在开发中都是使用封装好的库进行访问网络,比如okhttp

GET请求:

//开启子线程访问网络
new Thread(new Runnable() {@Override
    public void run() {try {//1.创建OkHttpClient对象
            OkHttpClient client = new OkHttpClient();//2.创建Request对象
            Request request = new Request.Builder().url("https://www.baidu.com/").build();//3. 同步请求
           // Response response = client.newCall(request).execute();
            // 4.异步请求
              client.newCall(request).enqueue(new Callback() {@Override
                  public void onFailure(Call call, IOException e) {}@Override
                  public void onResponse(Call call, Response response) throws IOException {String s = response.body().string();if (s != null) {showText(s);}}});} catch (Exception e) {e.printStackTrace();} finally {}}
}).start();

POST请求:其实比get多了一个创建表单并往表单增加数据的步骤

//开启子线程访问网络
new Thread(new Runnable() {@Override
    public void run() {try {//1.创建OkHttpClient对象
            OkHttpClient client = new OkHttpClient();//2.创建RequestBody对象
            RequestBody requestBody = new FormBody.Builder().add("username", "tom").add("password", "123").build();//3.创建Request对象
            Request request = new Request.Builder().post(requestBody).url("https://www.baidu.com/").build();//4. 同步请求
            // Response response = client.newCall(request).execute();
            //5.异步请求
            client.newCall(request).enqueue(new Callback() {@Override
                public void onFailure(Call call, IOException e) {}@Override
                public void onResponse(Call call, Response response) throws IOException {String s = response.body().string();if (s != null) {showText(s);}}});} catch (Exception e) {e.printStackTrace();} finally {}}
}).start();

我们可以看到okhttp已经封装的比较屌了,但是还是需要各种切换线程,所以推荐使用OkGo,简单到哭

public void okGo(View view) {OkGo.<String>get("https://www.baidu.com/").tag(this).execute(new StringCallback() {@Override
        public void onSuccess(Response<String> response) {tvOkGo.setText(response.body().toString());}@Override
        public void onError(Response<String> response) {}});
}

https://github.com/jeasonlzy/okhttp-OkGo

Android使用Http访问网络相关推荐

  1. 解决android模拟器不能访问网络的问题

    解决android模拟器不能访问网络的问题 参考文章: (1)解决android模拟器不能访问网络的问题 (2)https://www.cnblogs.com/oriental/p/11750330. ...

  2. Android使用HttpURLConnection访问网络

    Android使用HttpURLConnection访问网络 一.管理网络状态 使用网络进行数据通信前,需要先获取网络状态. 使用ConnectivityManager获取网络状态步骤: 1.获取Co ...

  3. android访问网络的方法,Android Http协议访问网络实例(3种)

    之前关于Android Http协议访问网络的一点分析,最近需要回顾,就顺便发到随笔上了 Android中http连接主要是为了获取网络数据,目前了解的有3种方法: Httpconnection -- ...

  4. android主线程访问网络的方法

    从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会 ...

  5. Android 使用 HTTP 访问网络

    使用 HttpURLConnection 在过去,Android 上发送 HTTP 请求一般有两种方式:HttpURLConnection 和 HttpClient,不过在 Android 6.0 系 ...

  6. Android多媒体学习六:访问网络上的Audio对应的M3U文件,实现网络音频流的播放

    Android中提供了对网络上流媒体的支持,我们可以使用MediaPlayer类来播放一个网络上的音频文件. 但是网络上的站点并不建议我们直接访问流,我们需要获取他提供的M3U文件,根据M3U文件来实 ...

  7. android 检测当前wifi是否又网络,android判断连接的wifi是否能访问网络

    如果只是想检测网络是否连接,则直接使用 isNetworkConnected() 如果想检测网络连通性(是否能访问网络),则 isNetworkConnected() 与 isNetworkOnlin ...

  8. Android复习03(Get请求访问网络[详解]、获取文章列表)

    2020年3月26日 第6周 星期四 https://ke.qq.com/webcourse/index.html#cid=989760&term_id=101085595&taid= ...

  9. Android访问网络系列之--访问图片

    今天闲着无聊,顺便做了个android 访问网络图片的demo,希望与大家分享下: 下面是主要代码: 1.main.xml <?xml version="1.0" encod ...

最新文章

  1. 【shell】删除重复文件
  2. ArrayList和LinkedList区别
  3. 消除左递归c++代码_「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解...
  4. Android版:验证手机号码的正则表达式 (转)
  5. php环境模拟stphp_用php模拟做服务端侦听端口
  6. linux 常用SHELL
  7. OpenLDAP 2.4.44 安装 + phpLDAPadmin 安装
  8. 单反相机很久没有更新产品问世了,真的已经被抛弃了吗?
  9. hbase针对fullgc所做的优化(Memstore所作的优化 针对BlockCache所作优化)
  10. JVM(二):垃圾回收
  11. 负载均衡(Load Balance)
  12. dynamic k-max pooling 动态k-max 池化
  13. BZOJ 5442: [Ceoi2018]Global warming
  14. 在html中用于设置页面元信息的标示符,在html中用于设置页面元信息的标示符是什么...
  15. IDEA创建applicationContext.xml文件图标不是xml文件图标
  16. 关于群论在量子力学中的应用
  17. Hexo博客主题Next添加动态线条背景canvas_nest
  18. 教育教学论坛杂志教育教学论坛杂志社教育教学论坛编辑部2022年第39期目录
  19. 网盘江湖混战难打 百度为何坚持加码?
  20. Ansible playbook 详解

热门文章

  1. 在linux 创建网络会话和绑定两块网卡
  2. 函数名、闭包及迭代器
  3. php 安装redis 扩展
  4. jquery怎么创建一个img标签
  5. 孤读Paper——《FCOS: Fully Convolutional One-Stage Object Detection》
  6. 在GitHub上删除项目后,在Android Studio上传项目依然提示project is already on github
  7. (二)Python 装饰器
  8. Linux文本处理(grep,sed)
  9. exchange2013 OWA界面使用公有计算机或私有计算机选项
  10. android 通过html设置textview的内容不同种颜色