Retrofit2.0入门教程

Retrofit的官方文档前面我已经把现在最为流行三个网络框架的其中两个volley和Okhttp3撸了一遍,接下来我就把最后的一个Retrofit2也撸一下。最近也搞了一下Android SDK开发的事,发现网上对于Android SDK开发的资料真的很少。到时我会把这个框架的功能集成到一个Jar包上,做一个简单的SDK开发来让大家也了解一下。

我们先来了解一下Retrofit2这个网络框架,准确来说Retrofit是基于Okhttp3的官方封装一个网络框架。所以这个框架的使用跟Okhttp3非常的相似,如果你在此之前又看过我前面的OKhttp3的教程或者其他人的教程的话,接下来的内容你就会更加的容易了解。

由于最近更新了Androidstudio3.0,便用这个编译环境来试水啦,不过使用原理都是一样的。首先我们先创建一个名为RetrofitDemo的项目,然后在app的gradle下添加Retrofit的依赖包。如下:

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

然后我们尝试做这样一个功能,当我们点击一个GET按钮时就向服务端发送一个GET请求,然后我们把返回来的结果通过吐司展示出来。当我们点击一个POST按钮就向服务端发送一个POST请求,也把返回来的结果吐司展现。XML布局如下:

<Button
       android:layout_margin="10dp"
       android:id="@+id/btn_login_get"
       android:text="GET登录"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
   <Button
       android:layout_margin="10dp"
       android:id="@+id/btn_login_post"
       android:text="POST登录"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

接下来我们创建一个名为Api的接口,这是根据Retrofit的官方文档的格式来定义。接口代码如下:

public interface Api {

    @GET("写上你要访问的地址")//GET请求注释
    Call<ResponseBody> getUserInfo();

    @POST("写上你要访问的地址")//POST请求注释
    Call<User> postSubmit (@Body User user);

}

主函数里,因为我们的POST请求是以JSON的格式来返回数据的,所以我们要先在app.gradle里添加GSON依赖,代码如下:

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

接下来我们分别为两个按钮添加点击事件,并调用刚才定义接口的GET和POST方法来验证是否能够正常访问我们需要访问的地址,并进行吐司,最后还要在AndroidManifest里面注册网络权限。主函数代码如下:

  private Button btn_login_get,btn_login_post;
    private  Api api;

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

        btn_login_get = findViewById(R.id.btn_login_get);
        btn_login_post = findViewById(R.id.btn_login_post);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("写上你要访问的基地址如:http://127.0.0.1:8080/")
                .addConverterFactory(GsonConverterFactory.create())//通过Gson的格式来解析数据
                .build();
        api = retrofit.create(Api.class);

        btn_login_post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.setMoyo_sdk_name("admin");
                user.setMoyo_sdk_pwd("123456");
                api.postSubmit(user).enqueue(new Callback<User>() {//调用了我们在接口上定义的POST方法postSubmit(请求类型) Callback(返回类型)
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {

                        String name = response.body().getMoyo_sdk_name();
                        String password = response.body().getMoyo_sdk_pwd();
                        int code = response.body().getCode();

                        Toast.makeText(MainActivity.this,"name:"+name+"password:"+password+"code:"+code,Toast.LENGTH_LONG).show();

                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {

                    }
                });
            }
        });

        btn_login_get.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //此部分为不简写,适合新手查看原理
//                Call<ResponseBody> call = api.getUserInfo();
//
//                call.enqueue(new Callback<ResponseBody>() {
//                    @Override
//                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//
//                        try {
//                            String msg = response.body().string();
//                            Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();
//                        } catch (IOException e) {
//                            e.printStackTrace();
//                        }
//                    }
//
//                    @Override
//                    public void onFailure(Call<ResponseBody> call, Throwable t) {
//
//                    }
//                });
//

                api.getUserInfo().enqueue(new Callback<ResponseBody>() {//调用了接口上的GET方法getUserInfo()
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                        try {
                            String result = response.body().string();
                            Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {

                    }
                });


            }
        });

    }

在我们处理数据的时候我们可以选择创建一些Bean类,因为每个人请求的后台所得到的数据都不一样我就不把我的Bean类的源码粘贴出来了。在官方文档中还有很多的提交形式,有兴趣的可以去了解一下。我这里算了抛砖引玉,如果有什么错误的地方欢迎各位提出来一个探讨。

原创:https://blog.csdn.net/weixin_40600325/article/details/81639593

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值