Retrofit2使用手册-基础一

最近一直在看一些框架,开始慢慢了解到Retrofit,查了好多资料,也看了官网的资料。最后发现,框架并不是很复杂,主要是资料太零散,而且大部分都是写给高手看的,光点题,无实例。我还是决定自己写一下,一个菜鸟的心得体会。

这篇我先写一个最最最简单的(这里面会有接口,会有泛型,会有Gson Format生成的类)

先把依赖放出来

    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'

首先我来说一下,这个项目需要做些什么

我有一个网址:http://cloud.bmob.cn/d9f6840be6bb07cf/wash_test?clive=wash

请求成功之后会返回一组json数据

{
  "washInfo": [
    {
      "WashHead": "http://file.bmob.cn/M02/9A/D2/oYYBAFbD7M2Aa_YKAABfpRaTgOg207.png",
      "WashName": "帽子",
      "Amount": "¥5"
    },
    {
      "WashHead": "http://file.bmob.cn/M02/9A/D3/oYYBAFbD7PyAXTQkAABh2U-waq4780.png",
      "WashName": "衬衣",
      "Amount": "¥10"
    },
    {
      "WashHead": "http://file.bmob.cn/M02/9A/D3/oYYBAFbD7QqAfBcfAABwrLcpojo647.png",
      "WashName": "皮衣",
      "Amount": "¥100"
    },
    {
      "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7V-AIO99AABI0yQ_tLg889.png",
      "WashName": "羽绒服",
      "Amount": "¥80"
    },
    {
      "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7XKAQtouAACCvCGGiCo190.png",
      "WashName": "唐装",
      "Amount": "¥50"
    },
    {
      "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7XiARjlUAABkLEO8ZTU657.png",
      "WashName": "西服",
      "Amount": "¥150"
    },
    {
      "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7X6ABVjDAABtcSiw-HI923.png",
      "WashName": "长袖风衣",
      "Amount": "¥218"
    }
  ]
}

要求:

1、肯定是要请求数据

2、解析json数据

3、主线程打印接受到的数据

这篇我就先完成这最基本的一套流程,接下来就看代码,注意注释哦

先看Gson Format生成的类

package com.ty.retrofit_demo2;

import java.util.List;

/**
 * Created by IT on 2017/3/31.
 */

public class WashGson {

    private List<WashInfoBean> washInfo;

    public List<WashInfoBean> getWashInfo() {
        return washInfo;
    }

    public void setWashInfo(List<WashInfoBean> washInfo) {
        this.washInfo = washInfo;
    }

    public static class WashInfoBean {
        /**
         * WashHead : http://file.bmob.cn/M02/9A/D2/oYYBAFbD7M2Aa_YKAABfpRaTgOg207.png
         * WashName : 帽子
         * Amount : ¥5
         */

        private String WashHead;
        private String WashName;
        private String Amount;

        public String getWashHead() {
            return WashHead;
        }

        public void setWashHead(String WashHead) {
            this.WashHead = WashHead;
        }

        public String getWashName() {
            return WashName;
        }

        public void setWashName(String WashName) {
            this.WashName = WashName;
        }

        public String getAmount() {
            return Amount;
        }

        public void setAmount(String Amount) {
            this.Amount = Amount;
        }
    }
}
再看主函数

package com.ty.retrofit_demo2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import java.util.List;

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

/**
 * 请求的地址:http://cloud.bmob.cn/d9f6840be6bb07cf/wash_test?clive=wash
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //第一步
        //开始配置Retrofit
        Retrofit retrofit = new Retrofit.Builder()
                //请求地址:http://cloud.bmob.cn/
                /**
                 * 注意这里需要的是一个地址,也就是服务器的根路径,具体的请求内容并不是在这里设置;
                 * 根路径只能有一个,但是根路径下会有很多的子路径也就是PATH
                 * 还要注意,参数是必须以'/'结尾,不然会抛出异常
                 */
                .baseUrl("http://cloud.bmob.cn/")
                //我请求的数据,是json格式的,我用Gson Format根据返回的数据,生成了一个类,叫做WashGson
                /**
                 * 如果你不需要自动解析,就想要返回一个ResponseBody(Retrofit其实是封装后的OKHTTP),可以不写这一句
                 * 如果你要使用的话,记得要加上依赖:compile 'com.squareup.retrofit2:converter-gson:2.2.0'
                 */
                .addConverterFactory(GsonConverterFactory.create())
                //生成
                .build();
        //第二步
        //开始配置接口
        /**
         * 这个又是个看起来怪异的东西,我换一个大家常用的,大家看了就懂了
         */
        //List<String> list = new ArrayList<String>();
        /**
         * 首先接口不能自己实例化,必须要通过子类去实例化,
         * WashService是接口,通过retrofit.create(WashService.class)去生成子类
         * 是不是很清晰!!!!
         */
        WashService service = retrofit.create(WashService.class);
        //第三步
        //获得请求的一个发起器,也可以说是客户端,通过他可以发起一个完整的请求
        //实例化接口以后,我们就能调用接口的函数了
        Call<WashGson> washGsonCall = service.GetData();
        //发起请求,网络请求是不能在UI线程调用的,但是Retrofit会自动的去子线程开启网络请求,并在UI线程回调方法
        //这样我们就会很方便,对不对
        washGsonCall.enqueue(new Callback<WashGson>() {
            //这个会在UI线程调用
            @Override
            public void onResponse(Call<WashGson> call, Response<WashGson> response) {
                //看到这里是不是就明白了,接口设置的时候你需要返回什么类型,只要Retrofit支持,他就会自动给你转换好
                List<WashGson.WashInfoBean> washInfoList = response.body().getWashInfo();
		//此处有断点
                Toast.makeText(MainActivity.this, "Data GET!!", Toast.LENGTH_SHORT).show();
            }
            //这个不确定他在哪个线程,因为我还无法测试,就算请求失败也是不会调用它的。
            //我看了下源码注释,说他是未知异常错误,网络异常才会调用,以后用到了,我再来补充
            @Override
            public void onFailure(Call<WashGson> call, Throwable t) {

            }
        });

    }


    interface WashService {
        //用注释表示请求的方法,方法有很多,这篇我先写一种Get,其他的分到下一篇再写

        /**
         * 1、首先看一下GET括号内的内容,这个就是根路径下的子路径
         * 里面是可以是用通配符去解析的,之后的博客里我也会专门写一个
         * 2、注意看这个:Call<WashGson>
         * 这是Call是一个泛型类,而他的类型由我们来指定,并且这个类型就是我们之后所需要接受到的数据
         * 如果你只想要一个ResponseBody,这里就写成Call<ResponseBody>
         * 3、@GET是框架定义的,名字代表这方法,但是其他的包括接口的名字,函数的名字,请随意
         * 4、最后一点要注意,Call<WashGson>这个是返回值!!!!!!
         */
        @GET("d9f6840be6bb07cf/wash_test?clive=wash")
        Call<WashGson> GetData();
    }
}
来看一下结果,我打了个断点,用debug看了下请求结果



可以看到已经得到结果了,好了这篇就到这里,欢迎拍砖



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
retrofit-spring-boot-starter是一个用于整合Retrofit库和Spring Boot的starter项目,它可以简化在Spring Boot中使用Retrofit的配置和使用。 以下是retrofit-spring-boot-starter的使用方法: 1. 在你的Spring Boot项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.github.lianjiatech</groupId> <artifactId>retrofit-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> ``` 2. 创建一个接口,用于定义Retrofit的API接口。例如: ```java import retrofit2.http.GET; import retrofit2.http.Path; public interface MyApi { @GET("/users/{username}") User getUser(@Path("username") String username); } ``` 3. 在你的Spring Boot应用程序中,使用`@Autowired`注解将Retrofit的API接口注入到你的代码中。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import retrofit2.Retrofit; @Service public class MyService { private final MyApi myApi; @Autowired public MyService(Retrofit retrofit) { this.myApi = retrofit.create(MyApi.class); } public User getUser(String username) { return myApi.getUser(username); } } ``` 4. 现在你可以在你的代码中使用`MyService`来调用Retrofit的API接口了。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { private final MyService myService; @Autowired public MyController(MyService myService) { this.myService = myService; } @GetMapping("/users/{username}") public User getUser(@PathVariable String username) { return myService.getUser(username); } } ``` 以上是retrofit-spring-boot-starter的基本用法。你可以根据自己的需求进行配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值