Retrofit 2.1入门

, map);
    try {
        Response<String>body=call.execute();
        System.out.print(body.body());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

query 访问的参数会添加到路径(path)的后面.

实际访问的url是 http://tieba.baidu.com/sheet?name=laiqurufeng&age=22&gender=male&address=sz  (模拟的访问)

encoded =true表示对url的query进行url编码,同理还有encodeValues. 这2个的值默认都是true的

如果上面的代码换成 map.put("性别","男") ,然后更改@QueryMap(encoded =false )

那么实际访问的url变成了 http://tieba.baidu.com/sheet?name=laiqurufeng&age=22&性别=%E7%94%B7&address=sz (可以看到key没有进行url编码,value进行了url编码).

Header注解

header分为key和value都固定,静态Header注解方法 和 动态Header注解方法

注意header不会相互覆盖.

静态Header

interface FixedHeader{

@Headers({    //静态Header

"Accept: application/vnd.github.v3.full+json",

"User-Agent: Retrofit-Sample-App"

})

@GET("/")

Call<ResponseBody> getResponse();

}

动态Header

interface DynamicHeader{

@Headers("Cache-Control: max-age=640000")       //动态Header

@GET("/")

Call<ResponseBody> getResponse(

@Header("header1")String header1,

@Header("header2")String header2);

//动态Header,其value值可以在调用这个方法时动态传入.

}

例子:

public class PhoneResult {
    /**
     * errNum : 0
     * retMsg : success
     * retData : {"phone":"15210011578","prefix":"1521001","supplier":"移动","province":"北京","city":"北京","suit":"152卡"}
     */
    public int errNum;
    public String retMsg;
    /**
     * phone : 15210011578
     * prefix : 1521001
     * supplier : 移动
     * province : 北京
     * city : 北京
     * suit : 152卡
     */
    public RetDataEntity retData;
    public static class RetDataEntity {
        public String phone;
        public String prefix;
        public String supplier;
        public String province;
        public String city;
        public String suit;

        @Override
        public String toString() {
            return "RetDataEntity{" +
                    "phone='" + phone + '\'' +
                    ", prefix='" + prefix + '\'' +
                    ", supplier='" + supplier + '\'' +
                    ", province='" + province + '\'' +
                    ", city='" + city + '\'' +
                    ", suit='" + suit + '\'' +
                    '}';
        }
    }
}

Service:

动态Header

public interface PhoneService {
    @GET("/apistore/mobilenumber/mobilenumber")
    Call<PhoneResult> getResult(
            @Header("apikey")String apikey,
            @Query("phone")String phone
    );
}

静态Header

public interface PhoneServiceDynamic {
    @Headers("apikey:8e13586b86e4b7f3758ba3bd6c9c9135")
    @GET("/apistore/mobilenumber/mobilenumber")
    Call<PhoneResult> getResult(
            @Query("phone")String phone
    );
}

调用

public static void phone_Query(String phone){
    final String BASE_URL="http://apis.baidu.com";
    final String API_KEY="8e13586b86e4b7f3758ba3bd6c9c9135";
    //1.创建Retrofit对象
    Retrofit retrofit=new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    //2.创建访问API的请求
    PhoneService service=retrofit.create(PhoneService.class);
    Call<PhoneResult>call=service.getResult(API_KEY,phone);
    //3.发送请求
    try {
        Response<PhoneResult>response=call.execute();
        //4.处理结果
        if (response.isSuccessful()) {
            PhoneResult result=response.body();
            if (result!=null) {
                PhoneResult.RetDataEntity entity = result.getRetData();
                System.out.print(entity.toString());
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    /*异步调用

call.enqueue(new Callback<PhoneResult>() {
        @Override
        public void onResponse(Call<PhoneResult> call, Response<PhoneResult> response) {
            //4.处理结果
            if (response.isSuccessful()) {
                PhoneResult result=response.body();
                if (result!=null) {
                    PhoneResult.RetDataEntity entity = result.getRetData();
                    System.out.print(entity.toString());
                }
            }
        }
        @Override
        public void onFailure(Call<PhoneResult> call, Throwable t) {
        }
    });*/
}

上传文件

public interface UploadServer {
    @Headers({//静态Header
            "User-Agent: androidphone"
            })
    @Multipart
    @POST("/service.php?mod=avatar&type=big")
        // upload is a post field
        // without filename it didn't work! I use a constant name because server doesn't save file on original name
        //@Part("filename=\"1\" ") RequestBody
        //以表单的形式上传图片
    Call<JsonObject> uploadImageM(@Part("file\";filename=\"1") RequestBody file);
//    Call<ResponseBody> uploadImage(@Part("file\"; filename=\"image.png\"") RequestBody file);
    /**
     * 以二进制流的形式上传 图片
     * @param file
     * @return
     */
    @Headers({//静态Header
            "User-Agent:androidphone"
    })
    @POST("/service.php?mod=avatar&type=big")
    Call<ResponseBody> uploadImage(@Body RequestBody file);
}

调用

public static void upload(String fpath) { // path to file like /mnt/sdcard/myfile.txt
    String baseurl="http://dev.123go.net.cn";
    File file = new File(fpath);
    // please check you mime type, i'm uploading only images
    RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
    /*RequestBody rbody=new MultipartBody.Builder()
            .addPart(requestBody).build();
    RequestBody requestFile =
            RequestBody.create(MediaType.parse("image/jpg"), file);
    MultipartBody.Part body =
            MultipartBody.Part.createFormData("image", file.getName(), requestFile);
    */
    Retrofit retrofit=new Retrofit.Builder()
            .baseUrl(baseurl)
            .addConverterFactory(GsonConverterFactory.create())
            .client(getOkhttpClient())
            .build();
    // 添加描述
    /*String descriptionString = "hello, 这是文件描述";
    RequestBody description =
            RequestBody.create(
                    MediaType.parse("multipart/form-data"), descriptionString);*/
    UploadServer server=retrofit.create(UploadServer.class);
    Call<ResponseBody> call = server.uploadImage(requestBody);
    call.enqueue(new Callback<ResponseBody>() {

        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            ResponseBody jsonObject=response.body();
            System.out.print(jsonObject.toString());
        }
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
        }
    });
}

private static OkHttpClient getOkhttpClient(){
        final String cookie="your cookie";
        OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request request = chain.request()
                                .newBuilder()
//                                .addHeader("Content-Type", " application/x-www-form-urlencoded; charset=UTF-8")
//                                .addHeader("Accept-Encoding", "gzip, deflate")
//                                .addHeader("Connection", "keep-alive")
//                                .addHeader("Accept", "***")
                                .addHeader("Cookie", cookie)
                                .build();
                        return chain.proceed(request);
                    }
                })
                .build();

return httpClient;
    }

Retrofit 2.1 入门的更多相关文章

  1. Retrofit网络框架入门使用

    1.简单介绍 retrofit事实上就是对okhttp做了进一步一层封装优化. 我们仅仅须要通过简单的配置就能使用retrofit来进行网络请求了. Retrofit能够直接返回Bean对象,比如假设 ...

  2. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  3. Retrofit 从入门到了解【总结】

    源码:https://github.com/baiqiantao/RetrofitDemo.git 参考:http://www.jianshu.com/p/308f3c54abdd Retrofit入 ...

  4. Retrofit学习入门

    Retrofit的使用 设置权限与添加依赖 定义请求接口 通过创建一个retrofit生成一个接口的实现类(动态代理) 调用接口请求数据 设置权限与添加依赖 权限:首先确保在AndroidManife ...

  5. Retrofit入门

    1 Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) ...

  6. Retrofit 入门和提高

    首先感谢这个哥们,把我从helloworld教会了. http://blog.csdn.net/angcyo/article/details/50351247 retrofit 我花了两天的时间才学会 ...

  7. MVP模式入门(结合Rxjava,Retrofit)

    本文MVP的sample实现效果: github地址:https://github.com/xurui1995/MvpSample 老规矩,在说对MVP模式的理解之前还是要再谈谈MVC模式,了解了MV ...

  8. 「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!

    老生常谈 什么是 Retrofit ? Retrofit 早已不是什么新技术了,想必看到这篇博客的大家都早已熟知,这里就不啰嗦了,简单介绍下: Retrofit 是一个针对 Java 和 Androi ...

  9. Android开发 retrofit入门讲解 (RxJava模式)

    前言 retrofit除了正常使用以外,还支持RxJava的模式来使用,此篇博客讲解如何使用RxJava模式下的retrofit 依赖 implementation 'com.squareup.ret ...

随机推荐

  1. 又是周六了-MySQL特训

    hi 又是周六,又是磨蹭个一上午~午饭后开始吧 1.MySQL -----子查询与连接(三)----- ----使用INSERT...SELECT插入记录 --数据库内容的英文版本 由于我的WAMP中 ...

  2. 最小生成树POJ3522 Slim Span[kruskal]

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7594   Accepted: 4029 Descrip ...

  3. AC日记——判断字符串是否为回文 openjudge 1.7 33

    33:判断字符串是否为回文 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字符串(字符串中 ...

  4. 关于maya动力学系统的一些总结

    maya动力学有以下几套系统: 1.刚体.柔体系统 刚体系统的典型节点连接方法如下: 物体的变换节点.形状节点连接rigidBody节点,刚体节点输出力到解算器节点,解算器输出新的变换到变换节点 值得 ...

  5. 1,字符是否为空,2,比较两个字符大小。String.Compare(String, String)。string.IsNullOrEmpty(string)

    1, String.Compare 方法 (String, String) 比较两个指定的 String 对象. 值 条件 小于零 strA 小于 strB. 零 strA 等于 strB. 大于零 ...

  6. Dubbo架构设计详解

    from:http://shiyanjun.cn/archives/325.html Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解 ...

  7. Linode Centos6.5从零开始装环境...流水账

    安装JDK 下载. 先通过oracle网站, 下载, 得到link后, 在linode命令行里wget, 速度飞快, 但是文件名要改下. 其中JDK6是.bin, 其他都是tar.gz, bin直接执 ...

  8. Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

    概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...

  9. jQuery动态产生的铵钮怎样实现事件处理

    在ASP.NET MVC环境中,实现一个小功能,就是希望使用jQuery动态一个铵钮,并让用户能执行这个铵钮的click事件.为了更好的理解与对比,Insus.NET在视图中先写一个静态的,执行相似的 ...

  10. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...