Retrofit

Retrofit Best Practice

dependencies

compile 'com.zhy:okhttputils:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'

encapsulation

u can also init it in your application

public class HttpManager {

    /**
     * Holds the Singleton global instance of HttpManager.
     */
    private static final HttpManager sInstance = new HttpManager();

    /*
     * baseUrl must end in /
     */
    private static final String BASE_URL = "http://www.vincyan.com/dema/mobile/";

    private Retrofit mRetrofit;

    private HttpManager() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)

                .addInterceptor(new LoggerInterceptor("HttpTag"))
                //default no cookie。CookieJar.NO_COOKIES
                //persistent cookie
                .cookieJar(new CookieJarImpl(new PersistentCookieStore(applicationContext)))
                //memery cookie
//                .cookieJar(new CookieJarImpl(new MemoryCookieStore()))
                .build();

        mRetrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(new Gson()))
                .client(okHttpClient)
                .build();
    }

    public static HttpManager getInstance() {
        return sInstance;
    }

    public <T> T createService(Class<T> clazz) {
        return mRetrofit.create(clazz);
    }
}

ApiService

public interface ApiService {

    /*
    标准的post请求:
    1、@FormUrlEncoded
    表示表单数据(post参数),Each key-value pair is annotated with @Field
    containing the name and the object providing the value.
    否则会报异常IllegalArgumentException: @Field parameters can only be used with form encoding
    2、@Field 表示key-value
    3、@POST post请求
     */

    //登录
    @FormUrlEncoded
    @POST("index.php?act=login")
    Call<User> login(@Field("username") String username, @Field("password") String password, @Field("client") String client);

    //购物车数量
    @FormUrlEncoded
    @POST("index.php?act=member_cart&op=cart_count")
    Call<Cart> cartCount(@Field("key") String key);

    //关键字搜索,普通get
    @GET("index.php?act=index&op=search_key_list")
    Call<Search> search();

    //分页红包,带参get
    //等价于:index.php?act=member_redpacket&op=redpacket_list&key=4bf2ec6ff96824dd792ac079fb90422f&curpage=1&page=1000
    @GET("index.php?act=member_redpacket&op=redpacket_list")
    Call<Redpacket> redpacket(@Query("key") String key, @Query("curpage") String curpage, @Query("page") String page);

    //或使用Map表单
    @GET("index.php?act=member_redpacket&op=redpacket_list")
    Call<Redpacket> redpacket(@QueryMap Map<String, String> params);

    //Java版本第三方登录方式qq/weixin/weibo
    @GET("/loginconnect/umeng/{type}")
    Call<User> third(@Path("type") String type,@QueryMap Map<String, String> params);
}

Just

ApiService apiService = HttpManager.getInstance().createService(ApiService.class);

        //post登录
        apiService.login("lv1234", "333333", "android").enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                Log.d(TAG, "onResponse: 登录: " + response.body());
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.e(TAG, "onFailure() returned: " + t.getMessage());
            }
        });

        //post购物车数量
        apiService.cartCount("bbaad219df1e8271eeb631c51ac78af5").enqueue(new Callback<Cart>() {
            @Override
            public void onResponse(Call<Cart> call, Response<Cart> response) {
                Log.d(TAG, "onResponse: 购物车数量: "+response.body());
            }

            @Override
            public void onFailure(Call<Cart> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
            }
        });

        //get,无参数
        apiService.search().enqueue(new Callback<Search>() {
            @Override
            public void onResponse(Call<Search> call, Response<Search> response) {
                Log.d(TAG, "onResponse: 搜索: "+response.body());
            }

            @Override
            public void onFailure(Call<Search> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
            }
        });


        //带参get,key和当前页id
        apiService.redpacket("4bf2ec6ff96824dd792ac079fb90422f","1","10").enqueue(new Callback<Redpacket>() {
            @Override
            public void onResponse(Call<Redpacket> call, Response<Redpacket> response) {
                Log.d(TAG, "onResponse: 红包: "+response.body());
            }

            @Override
            public void onFailure(Call<Redpacket> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
            }
        });


        //带参get,key和当前页id
        Map<String,String> map = new HashMap<>();
        map.put("key","4bf2ec6ff96824dd792ac079fb90422f");
        map.put("curpage","1");
        map.put("page","10");
        apiService.redpacket(map).enqueue(new Callback<Redpacket>() {
            @Override
            public void onResponse(Call<Redpacket> call, Response<Redpacket> response) {
                Log.d(TAG, "onResponse: 使用Map获取红包: "+response.body());
            }

            @Override
            public void onFailure(Call<Redpacket> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
            }
        });

        //get带path,带参数
        Map<String,String> params = new HashMap<>();
        map.put("accessToken","4bf2ec6ff96824dd792ac079fb90422f");
        map.put("openId","1khkgfdv");
        map.put("clientType","android");
        apiService.third("weixin",params).enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                Log.d(TAG, "onResponse: 第三方登录: " + response.body());
                Log.d(TAG, "onResponse: 第三方登录: " + response.code()+"-->"+response.message());
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.e(TAG, "onFailure: "+t.getMessage() );
            }
        });

配置缓存,日志,请求头等Interceptor,可参考:

http://www.jianshu.com/p/93153b34310e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值