使用系统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<