Android初次使用 Retrofit

Posted 张学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android初次使用 Retrofit相关的知识,希望对你有一定的参考价值。

android Studio 4.0

build.grale 添加如下依赖:

dependencies {
     // Okhttp库
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    // Retrofit库
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    // Gson库解析和生成Json
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
}

AndroidManifest.xml 中添加网络权限

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

创建 Api 接口文件,代码如下

import java.util.Map;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface Api 
    
    // 网站及接口列表来源:https://blog.csdn.net/c__chao/article/details/78573737

    /**
     * 获取实时段子
     * @param page 段子页码
     * @param count 获取的数量
     * @return
     */
    @GET("/getJoke?type=video") // 段子类型为视频
    Call<Map> getJoke(@Query("page") int page, @Query("count") int count);

}

创建一个 NetUtil 网络工具类,代码如下

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * 网络工具类
 */
public class NetUtil {

    public final static String BASE_URL = "https://api.apiopen.top/";
    private final static String TAG = "NetUtil";
    private static Retrofit retrofit;
    private static Api api;

    static {
        retrofit = new Retrofit.Builder()
                .baseUrl(NetUtil.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())	// Gson 转换数据格式
                .build();
        api = retrofit.create(Api.class);
    }


    public static void getJock() {
        Call<Map> call = api.getJoke(1, 5);	// 调用获取段子的 api 方法
        
        call.enqueue(new Callback<Map>() {
            @Override
            public void onResponse(Call<Map> call, Response<Map> response) {
                Map data = response.body();
                Log.e(TAG, "onResponse: " + data);

                // 获取段子结果,输出每个段子的内容
                List<Map> result = (List<Map>) data.get("result");
                int i = 0;
                for (Map r : result) {
                    i++;
                    Log.d(TAG, "段子" + i + ":" + r);
                }

            }

            @Override
            public void onFailure(Call<Map> call, Throwable t) {
                Log.e(TAG, "onFailure: 获取失败");
            }
        });

    }


}

MainActivity 中调用 NetUtil 类

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

        // 调用实时段子方法
        NetUtil.getJock();
    }
}

运行结果:
在这里插入图片描述

以上是关于Android初次使用 Retrofit的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit2.0使用详解

如何从片段中的 JSON 响应中的对象获取数据

使用 Retrofit Android 使用 WCF,响应正文为空,响应代码 405

Android Studio - 使用 retrofit2 从 restdb 获取信息

git项目初次push提示error: failed to push some refs to https://gitee.com/xxxx/gittest.git’解决方案 --九五小庞(代码片段

Android RxJava/RxAndroid结合Retrofit使用