Retrofit2系列:简单的Get请求

Posted zhangjin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Retrofit2系列:简单的Get请求相关的知识,希望对你有一定的参考价值。

完整源码见: https://github.com/androidzhangjin/Retrofit2Demo

Postman调试接口

  • url地址:https://api.github.com/search/commits
  • 默认的http头部Accept,因为不能直接编辑它的值,所以不勾选,新建一个Accept。值为application/vnd.github.cloak-preview
  • Get请求参数q,值为repo:square/retrofit merge:false sort:author-date-desc
  • 发送后的效果:

    具体的json数据很长,就不粘贴了。自己用postman跑下,就有了。

开始撸代码

  • 网络权限
 <uses-permission android:name="android.permission.INTERNET"/>
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        ...
    }

    buildTypes {
      ...
    }

	// 增加java8的配置 
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
  • 导入retrofit2依赖,不需要再导入okhttp了。
    implementation 'com.squareup.retrofit2:retrofit:2.7.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
  • 从Postman中复制json数据,粘贴到GsonFormat插件,生成ResponseBean.java,接近1400行代码,就不贴了,看上面的github地址吧。
  • 新建接口GithubApiService.java,代码如下:
public interface GithubApiService {
    @GET("search/commits")
    Call<ResponseBean> getReposCommits(@Header("Accept") String authorization, @Query("q") String para);
}
  • MainActivity.java中初始化Retrofit、发送请求:
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "xxx";
    public static final String BASE_URL = "https://api.github.com/";
    private static Retrofit retrofit = null;

    private final static String REPO_PATH = "repo:square/retrofit merge:false sort:author-date-desc";
    private final static String HEADER_AUTH = "application/vnd.github.cloak-preview";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        connectAndGetApiData();
    }

    public void connectAndGetApiData(){
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }

        GithubApiService commitApiService = retrofit.create(GithubApiService.class);

        Call<ResponseBean> call = commitApiService.getReposCommits(HEADER_AUTH,REPO_PATH);

        call.enqueue(new Callback<ResponseBean>() {
            @Override
            public void onResponse(Call<ResponseBean> call, Response<ResponseBean> response) {
                List<ResponseBean.ItemsBean> commits = response.body().getItems();
                Log.d(TAG, "Number of commits received: " + commits.size());
            }

            @Override
            public void onFailure(Call<ResponseBean> call, Throwable throwable) {
                Log.e(TAG, throwable.toString());
            }
        });
    }
}

运行结果,logcat截图,搞定。
在这里插入图片描述

以上是关于Retrofit2系列:简单的Get请求的主要内容,如果未能解决你的问题,请参考以下文章

Android实战——Retrofit2的使用和封装

Retrofit2 动态(静态)添加请求头Header

网络通信框架Retrofit2

简单的 Javascript http 请求片段但不起作用

Retrofit2与RxJava用法大全

一款基于RxJava2+Retrofit2实现简单易用的网络请求框架