这里我们简单先看一下效果

什么是Retrofit呢?**
  1. Retrofit可以理解为请求网络的一种方式
  2. 比如我们之前常用的HttpClient,HttpConnection,Okhttp等
  3. 它是基于Okhttp基础上进行研发的,优点我们可以从网上找

1.首先是定义请求接口

public interface ProjectAPI
{
    //这是get请求
    @GET
    Call<String> getMethod(@Url String url);

    //这是post请求
    //必须添加@FormUrlEncoded注解

    @FormUrlEncoded
    @POST
    Call<String> postMethod(@Url String url, @FieldMap Map<String,String> map);
}

2.创建管理类HttpManager进行管理接口

public class HttpManager
{
//请求网络使用Get方式,baseUrl是基本的接口,
//对于完整接口http://v.juhe.cn/todayOnhistory/queryEvent.php?//key=69a7eeba7869f8bdcdee7b2bc3bb5aa2&date=1/16

//http://v.juhe.cn/就是基本接口

//url是我们的最终的接口,但有一点注意的是,我们的url既可以以上述为例为
http://v.juhe.cn/todayOnhistory/queryEvent.php?//key=69a7eeba7869f8bdcdee7b2bc3bb5aa2&date=1/16

//也可以是todayOnhistory/queryEvent.php?//key=69a7eeba7869f8bdcdee7b2bc3bb5aa2&date=1/16,整体url可以是拼接起来的至于重复的会被url覆盖,简单来说就是指
url针对baseUrl调整,url没有的会复制baseUrl的,有的就覆盖掉


    public static void getMethod(String baseUrl, String url, final Callback<String> callback)
    {

        Retrofit retrofit=new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(ScalarsConverterFactory.create()).build();

        ProjectAPI projectAPI=retrofit.create(ProjectAPI.class);

        Call<String> stringCall=projectAPI.getMethod(url);

        stringCall.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                callback.onResponse(call,response);
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                callback.onFailure(call,t);
            }
        });
    }

 //

 //1. post请求
 //2. map集合中存放我们不同的请求参数
 //3. Callback<String> callback回调接口

    public static void postMethod(String baseUrl, String url, Map<String,String> map, final Callback<String> callback)
    {

        Retrofit retrofit=new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(ScalarsConverterFactory.create()).build();

        ProjectAPI projectAPI=retrofit.create(ProjectAPI.class);

        Call<String> stringCall=projectAPI.postMethod(url,map);

        stringCall.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                callback.onResponse(call,response);
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                callback.onFailure(call,t);
            }
        });
    }
}

接下来在主页面根据我们的请求方式(Get,Post)不同来进行请求了


Get请求

            //管理类调用封装的Get方法
                HttpManager.getMethod("http://v.juhe.cn/", "http://v.juhe.cn/todayOnhistory/queryEvent.php?key=69a7eeba7869f8bdcdee7b2bc3bb5aa2&date=1/16", new Callback<String>() {
                    @Override
                    public void onResponse(Call<String> call, Response<String> response) {
                        Toast.makeText(MainActivity.this, response.body(), Toast.LENGTH_SHORT).show();
                    }

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

                    }
                });

Post请求

 Map<String,String> map1=new HashMap<String,String>();
                map1.put("key","69a7eeba7869f8bdcdee7b2bc3bb5aa2");
                map1.put("date","1/15");
            //管理类调用封装的Get方法

                HttpManager.postMethod("http://v.juhe.cn/", "todayOnhistory/queryEvent.php", map1, new Callback<String>() {
                    @Override
                    public void onResponse(Call<String> call, Response<String> response) {
                        Toast.makeText(MainActivity.this, response.body(), Toast.LENGTH_SHORT).show();
                    }

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

                    }
                });
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐