Android Retrofit例子Demo

本文介绍如何使用Retrofit进行API调用,包括在Android项目中添加依赖、创建Service接口、配置Retrofit实例及自定义回调处理响应数据。通过一个简单示例,展示了从依赖引入到数据解析的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

暂不知怎么开头,直接上实践了,慢慢补充

 

1.一个Retrofit的小案例Demo。

首先得在build.gradle中添加Retrofit添加依赖,例如:

    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'

简单的例子:三步骤。

1. 新建Service文件

public interface SimpleDemoApiService {
	@GET("/jerechen/article/details/83722574")
	Call<ResponseBody> getJereChenBlog();
}

2. 新建wrapper文件

public class SimpleDemoApiWrapper {
    private static Retrofit retrofit;
	private static final String BASE_URL = "https://blog.youkuaiyun.com";
	
	public static Retrofit getRetrofitInstance() {
	    if (retrofit == null) {
	
	        // customize retrofit network timeouts, default timeouts is ten seconds.
	        OkHttpClient okHttpClient = new OkHttpClient.Builder()
	                .connectTimeout(1, TimeUnit.MINUTES)
	                .readTimeout(30, TimeUnit.SECONDS)
	                .writeTimeout(15, TimeUnit.SECONDS)
	                .build();
	
	        retrofit = new retrofit2.Retrofit.Builder()
	                .baseUrl(BASE_URL)
	                .client(okHttpClient)
	                .build();
	    }
	    return retrofit;
	}
}

3. 直接在Activity中调用

public class SimpleDemo extends AppCompatActivity {
    private static final String TAG = "SimpleDemo";
    private TextView mTextView;

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


        Button callApiBtn = findViewById(R.id.simple_demo_call_api_btn);
        mTextView = findViewById(R.id.simple_demo_tv);
        callApiBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getBlog();
            }
        });

    }

    private void getBlog() {
        SimpleDemoApiService simpleDemoApiService = SimpleDemoApiWrapper.getRetrofitInstance().create(SimpleDemoApiService.class);
        simpleDemoApiService.getJereChenBlog().enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Log.d(TAG, "onResponse: ");
                try {
                    mTextView.setText(response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d(TAG, "onFailure: ");
            }
        });
    }

}

2. 自定义回调函数

将 Response 解析成 User。


/**
 * @author jere
 */
public class User {
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("age")
    @Expose
    private Integer age;
    @SerializedName("height")
    @Expose
    private Integer height;
    @SerializedName("weight")
    @Expose
    private Integer weight;
    @SerializedName("address")
    @Expose
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

回调函数

public abstract class AbstractGetUserInfoCallback implements Callback<ResponseBody> {
    abstract void getUserInfoSuccess(User user);

    abstract void getUserInfoFailed(String failedMessage);

    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        if (response.code() == 200) {
            try {
                String responseBodyString = response.body().string();
                Gson gson = new Gson();
                User user = gson.fromJson(responseBodyString, User.class);
                getUserInfoSuccess(user);
            } catch (IOException e) {
                e.printStackTrace();
                getUserInfoFailed("parse response body failed!");
            }
        } else {
            getUserInfoFailed("error responseCode: " + response.code());
        }
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        getUserInfoFailed(t.getMessage());
    }
}

 

 

完整代码请参考: https://github.com/JereChen11/Retrofit-master

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值