安卓中使用retrofit实现简单的网络请求

1,499 阅读4分钟

Retrofit是一个HTTP网络请求框架的封装,但是retrofit仅负责网络接口的封装,网络请求的操作实际上是有OkHttp完成的,话不多说,先上菜,实现基本的功能。 实现步骤: 1.添加依赖。 在项目Demo中的build.gradle下添加retrofit的依赖:

implementation 'com.squareup.retrofit2:retrofit:2.5.0'

添加完后等同步完成后效果如下图所示: 2.添加gson Gson是google自己写的一个java对象与JSON相互转化的工具包,特点轻巧简便,易于使用,而且有很完备的文档可供查询,同时也是一个开源项目。 因为我请求访问后服务器返回的是一个JSON格式的数据,所以就使用gson来解析返回的数据了,先在项目Demo中的build.gradle下添加gson的依赖:

implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

添加完等同步完成后效果如下图所示: 3.创建json映射返回数据类

Json的数据格式为:

{

“Success”:”请求成功”

}

所以构建的类为:

public class Bean {
/**
 *
 * 网络请求返回的格式:
 * {"Success":"请求成功"}
 */
@NonNull
@Override
public String toString() {
    return "Success{" + Success + '}';
}
private String Success;
//    private DemoBean demo;
  public Bean(String success) {
      this.Success = success;
  }
  public String getSuccess() {
      return Success;
  }
  public void setSuccess(String success) {
      this.Success = success;
  }
}

在里面重写toString()方法,将返回数据输出为重写toString()方法的格式。

4.创建存放Url的常量类

public class Constans {
  //设置默认超时时间
  public static final int DEFAULT_TIME = 10;
  //这里写入你请求的Url
  public final static String BaseUrl = "";
  //这里写入你请求的get方式
  public final static String retrofit = "";
  public final static String retrofitList = "";
  public final static String retrofitPost = "";
}

里面的BaseUrl为自己需要请求的http接口,下面的retrofit和retrofitPost分别用于GET和POST请求。

5.创建用于描述网络请求的接口

Retrofit将Http请求抽象成java接口,使用注解的形式描述网络请求参数和配置网络请求参数。接口定义如下:

public interface ApiUrl {
    /**
     * 有效链接
     */
    @GET(Constans.retrofit)
//    Call<Bean> getRetrofit(@Query("lightNum") String lightNum, @Query("lightStatus")String lightStatus);
    Call<Bean> getRetrofit();

    @POST(Constans.retrofitPost)
    Call<Bean> postRetrofit(@Query("lightNum") String lightNum, @Query("lightStatus")String lightStatus);

}

接口中分别定义的是GET和POST请求方式。

6.创建Retrofit实例-在MainActivity的方法中创建实例:

 Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
        .addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
        .build();

7.开始发送请求-在MainActivity中编写开始发送请求方法,以下分别是GET和POST请求的例子:

GET请求:

ApiUrl api = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = api.getRetrofit();//开始对发送请求进行封装
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
    Log.e(TAG,"请求成功信息:" + response.body().toString());//请求成功的信息处理,输出结果
}

@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
    Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});

POST请求:

ApiUrl apiUrl = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = apiUrl.postRetrofit("1","1");//设置POST请求参数
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
    Log.e(TAG,"poet请求成功:" + response.body().toString());//请求成功的信息处理,输出结果
}

@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
    Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});

完整的GET和POST请求代码如下:

GET请求:

private void getRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
        .addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
        .build();
ApiUrl api = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = api.getRetrofit();//开始对发送请求进行封装
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
    @Override
    public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
        Log.e(TAG,"请求成功信息:" + response.body().toString());//请求成功的信息处理,输出结果
    }

    @Override
    public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
        Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
    }
});
}

POST请求:

private void postRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
        .addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
        .build();
ApiUrl apiUrl = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = apiUrl.postRetrofit("1","1");//设置POST请求参数
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
    @Override
    public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
        Log.e(TAG,"poet请求成功:" + response.body().toString());//请求成功的信息处理,输出结果
    }

    @Override
    public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
        Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
    }
  });
}

8.添加权限

在AndroidManifest.xml下添加网络请求权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Android 9.0后会屏蔽掉http请求,需要在

<application></application>    

下添加下面这个属性:

android:usesCleartextTraffic="true"

9.完结

最后可以在activity_main.xml中定义两个按钮,一个点击实现GET(getRetrofit方法)请求,另一个点击实现POST(postRetrofit方法)请求。 页面布局如下图所示:

在控制台打印的效果如下图所示: