Retrofit2系列:简单的Get请求

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

目录

      • Postman调试接口
      • 开始撸代码

Postman调试接口

  • url地址:https://api.github.com/search/commits
  • 默认的http头部Accept,因为不能直接编辑它的值,所以不勾选,新建一个Accept。值为application/vnd.github.cloak-preview
    Retrofit2系列:简单的Get请求_第1张图片
  • Get请求参数q,值为repo:square/retrofit merge:false sort:author-date-desc
    Retrofit2系列:简单的Get请求_第2张图片
  • 发送后的效果:
    Retrofit2系列:简单的Get请求_第3张图片
    具体的json数据很长,就不粘贴了。自己用postman跑下,就有了。

开始撸代码

  • 网络权限
 <uses-permission android:name="android.permission.INTERNET"/>
  • retrofit2.7.2中包含了okhttp3.14.7,需要增加java8编译配置,免得2.7.2版本编译失败。
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截图,搞定。
在这里插入图片描述

你可能感兴趣的:(Android技术积累,android)