retrofit :时下流行的网络请求库
使用步骤:
- 添加retrofit库依赖(因为retrofit是基于okhttp存在的,所以也要添加okhttp的依赖)
- 创建接收服务器返回数据的类(我感觉技术一个实体 bean)
- 创建一个用于描述网络请求的接口
- 创建retrofit的实例
- 创建网络请求接口的实例,并配置网络请求参数
- 发送网络请求(同步、异步)
- 处理服务器返回的数据
代码如下:
第一步:添加依赖
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
第二步:实体bean
package com.myjob;
/**
* Created by Administrator on 2018/5/10/010.
* 第一步:接收服务器返回数据的类
*/
public class Translation {
/**
* status : 1
* content : {"from":"en-EU","to":"zh-CN","out":"示例","vendor":"ciba","err_no":0}
*/
private int status;
private ContentBean content;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public ContentBean getContent() {
return content;
}
public void setContent(ContentBean content) {
this.content = content;
}
public static class ContentBean {
/**
* from : en-EU
* to : zh-CN
* out : 示例
* vendor : ciba
* err_no : 0
*/
private String from;
private String to;
private String out;
private String vendor;
private int err_no;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getOut() {
return out;
}
public void setOut(String out) {
this.out = out;
}
public String getVendor() {
return vendor;
}
public void setVendor(String vendor) {
this.vendor = vendor;
}
public int getErr_no() {
return err_no;
}
public void setErr_no(int err_no) {
this.err_no = err_no;
}
}
}
第三步:请求接口
package com.myjob;
import retrofit2.Call;
import retrofit2.http.GET;
/**
* Created by Administrator on 2018/5/10/010.
* 第二步:用于创建描述网络请求的接口
*/
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call<Translation> getCall();
// 注解里传入 网络请求 的部分URL地址
// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里
// 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略
// getCall()是接受网络请求数据的方法
}
第四步:发送请求并解析的过程
package com.myjob;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* 第三步:处理返回数据 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world
*/
public class MainActivity extends AppCompatActivity {
private Button button;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
button=findViewById(R.id.btn);
textView=findViewById(R.id.tv);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
request();//使用retrofit封装的方法
}
});
}
private void request() {
//第一步:创建一个retrofit的对象
final Retrofit retrofit= new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")//设置网络请求 的URL
.addConverterFactory(GsonConverterFactory.create())//设置使用gson解析
.build();
//第二步:创建请求接口的实例
GetRequest_Interface getRequest_interface= retrofit.create(GetRequest_Interface.class);
//第三步:对发送请求进行封装
Call<Translation> call=getRequest_interface.getCall();
//第四步:发送请求
call.enqueue(new Callback<Translation>() {
//第五步:请求成功回调
@Override
public void onResponse(Call<Translation> call, Response<Translation> response) {
//处理返回的数据结果
// response.body().show();结果可在控制台查看 一种方法
//第二种方法 解析了部分
textView.setText("获取的到信息是:状态为"+response.body().getStatus()+"内容为:"+
response.body().getContent().getFrom()+","+response.body().getContent().getOut() + "等等");
}
@Override//请求失败时回调
public void onFailure(Call<Translation> call, Throwable t) {
//
System.out.println("请求失败");
}
});
}
}
第五步:简单的效果图
-----------------------------------------------------------------------------------------------------------------------------
参考文献:https://blog.csdn.net/carson_ho/article/details/73732076
项目源码:https://download.csdn.net/download/qq_36636969/10405724