网络请求(一)——系统API和OkHttp的get/Post请求

使用系统API发起get、post请求,并解析返回的数据;
使用okhttp发起get、post请求,并解析返回的数据;
使用retrofit发起get、post请求,并解析返回的数据;

通过,知乎,金山词霸等的open api做练习

相关准备

API——应用程序接口,一个软件系统对其他软件系统提供的服务
SDK——软体开发工具包,一堆接口,封装好的,方便用

在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服务器提交数据。为了更加直观的观察数据,可以在程序屏幕上显示服务器反馈信息。又由于子线程无法更改UI界面,因此需要引入Handler代理器。实现get/post提交基本步骤就是,获取URL路径,根据路径得到Http连接,用HttpURLConnection对象设置相关的http配置信息、提交方式以及获取反馈码。当响应码为200时表示提交成功,可以通过HttpURLConnection以流的形式获取反馈信息。

Post和Get请求的区别

Post或者Get只是Http协议中向后台服务器发送数据的一种机制,是Http协议的一个组成部分。

Post请求是将要提交到后台服务器的数据放在Http包的包体中。

Get请求是将数据放在URL之后,比如http://androidxx.cn/forum.php?mo … d=11&extra=page%3D1,可以看到此URL由2部分组成,分别是http://androidxx.cn/forum.php和?后面的参数。这就是典型的Get请求方式。
因为Get请求时直接将参数放在URL后面,而URL的长度是有一定的限制,所以当传递的数据特别大的时候,Get请求就不能完成。

相比较,Post请求的参数是放在Http包的内部,不能轻易被看到;Get请求的参数直接是跟在URL之后,可以很容易被用户获取。所以,相对而言,Post的请求方式更安全。

在实际项目开发过程中,什么时候使用Get、什么时候使用Post呢?

Post(当涉及到参数的安全问题或者参数比较大的时候,应该使用Post请求方式),比如:

  • 登陆
  • 注册
  • 上传
  • 支付
  • 下单

Get(Get就是获取的意思,项目开发中,如果是相对简单的查询类接口可以使用Get请求方式),比如:

  • 获取图片
  • 获取文章详情

系统API

get请求

代码
  • activity_main.xml
    一个ScrollView,为了显示内容太多的时候可以上下拖动
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_request"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="send request"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_response"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />

    </ScrollView>
</LinearLayout>
  • MainActivity.java
public class MainActivity extends AppCompatActivity {
   

    private TextView mTv;
    private Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = findViewById(R.id.btn_request);
        mTv = findViewById(R.id.tv_response);

        mBtn.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View view) {
   
                sendRequestHttpURL();
            }
        });
    }

开启子线程,进行网络请求

    private void sendRequestHttpURL() {
   
        //开启线程,进行网络请求
        new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                getInfo();
                }
                
        }).start();

    }

使用HttpURLConnection 发出一条HTTP请求,模拟器百度登不上,请求目标地址用了oa网址。
用BufferReader对服务器返回的流进行读取,将结果传入showResponse()方法。(因为不能在子线程中更新ui)

    private void getInfo<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值