Retrofit这个框架来自于square公司和okhttp是一个公司,这个也是一个bulider链式模式,一种构建者模式,okhttp可以通过get或者post对服务器进行请求,请求到数据,而Retrofit是封装了网址,注解的方式来做的,同时做了解析和发送handler,这个时候我们就拿到了一个对象,更加方便。因此在使用它的时候需要导三个包okhttp,josn,和Retrofit.下面来看它如何使用
一.添加依赖。加上一个Retrofit的依赖
二、第二步开始Retrofit的构建
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())//解析方法
.baseUrl("http://route.showapi.com/")//主机地址
.build();
三、用注解的方式进行Url的请求填参,来建立一个请求对象,Call<?>这个里面就是请求的内容,第一个用什么方式来请求。这里是get,这里的注解就是用接口有请求的方式和请求的参数
public interface retrofitinter
{
//以get方式请求,里面需要填写一个网址,可以填写全路径http://route.showapi.com/213-4,也可以填写没填的那一部分,在前面已经填了"http://route.showapi.com/",所以可以填/213-4/,就可以。路径以注解的为准,通常填写以前面一部分+后面一部分构成;
@GET("/213-4/")
//这句话的意思就是请求完了之后给你一个Call,一个解析好了的jsontop对象,后面我们用的参数叠加用的是Query来叠加参数@Query("cate") String cate;这种格式,下面就拼好了三个参数,接口里面就写好了,主要说明参数咋么拼
Call<josntop> getResult(@Query("showapi_appid") String showapi_appid, @Query("topid") String topid, @Query("showapi_sign") String showapi_sign);
}
四、请求网络,获取接口对象
PlayerActivity.retrofitinter retrofitinter=retrofit.create(PlayerActivity.retrofitinter.class);2.对请求进行封装,拿到一个请求解析好的对象,这个方法是接口里面的参数,填的值就是参数Call<josntop> call=retrofitinter.getResult("48962","5","9ad486a2461e47f4b3391171911f5b4b");五、正式开始请求(异步,同步),得到一个对象new Callback<jsontop>(){},就可以拿到了,数据就可以进行操作了 call.enqueue(new Callback<josntop>() {
@Override
public void onResponse(Call<josntop> call, Response<josntop> response)
{
list1= (ArrayList<josntop.ShowapiResBodyBean.PagebeanBean.SonglistBean>) response.body().getShowapi_res_body().getPagebean().getSonglist();
TextView TV= (TextView) findViewById(R.id.Retorytext4);
// for(int i=0;i<list1.size();i++)
// {
// list1.get(i).getSingername();
Log.e("msg", list.get(i).getSingername()+"");
// TV.append(list1.get(i).getSingername());
//
listAdapter.get(list,context);
// }
GridLayoutManager line=new GridLayoutManager(RecycleAcitity.this,2);
// LinearLayoutManager line= new LinearLayoutManager(RecycleAcitity.this);
mrycleview=(RecyclerView)findViewById(R.id.listrecle);
mrycleview.setLayoutManager(line);
// line.setOrientation(OrientationHelper.HORIZONTAL);
rec=new recycleadapter();
rec.setdata(list1);
mrycleview.setAdapter(rec);
}
@Override
public void onFailure(Call<josntop> call, Throwable t) {
}
});
//以下是完整的Reofit请求的代码
public class RecycleAcitity extends AppCompatActivity {
private RecyclerView mrycleview;
private ArrayList<josntop.ShowapiResBodyBean.PagebeanBean.SonglistBean> list1;
recycleadapter rec;
private ArrayList<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle_acitity);
query();
}
public void init()
{
data=new ArrayList<String>();
for (int i = 'A'; i < 'z'; i++)
{
data.add("" + (char) i);
}
}
private void query()
{
// http://route.showapi.com/213-4?showapi_appid=48962&topid=5&showapi_sign=9ad486a2461e47f4b3391171911f5b4b
//1.创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())//解析方法
.baseUrl("http://route.showapi.com/")//主机地址
.build();
PlayerActivity.retrofitinter retrofitinter=retrofit.create(PlayerActivity.retrofitinter.class);
Call<josntop> call=retrofitinter.getResult("48962","5","9ad486a2461e47f4b3391171911f5b4b");
call.enqueue(new Callback<josntop>() {
@Override
public void onResponse(Call<josntop> call, Response<josntop> response)
{
list1= (ArrayList<josntop.ShowapiResBodyBean.PagebeanBean.SonglistBean>) response.body().getShowapi_res_body().getPagebean().getSonglist();
TextView TV= (TextView) findViewById(R.id.Retorytext4);
// for(int i=0;i<list1.size();i++)
// {
// list1.get(i).getSingername();
Log.e("msg", list.get(i).getSingername()+"");
// TV.append(list1.get(i).getSingername());
//
listAdapter.get(list,context);
// }
GridLayoutManager line=new GridLayoutManager(RecycleAcitity.this,2);
// LinearLayoutManager line= new LinearLayoutManager(RecycleAcitity.this);
mrycleview=(RecyclerView)findViewById(R.id.listrecle);
mrycleview.setLayoutManager(line);
// line.setOrientation(OrientationHelper.HORIZONTAL);
rec=new recycleadapter();
rec.setdata(list1);
mrycleview.setAdapter(rec);
}
@Override
public void onFailure(Call<josntop> call, Throwable t) {
}
});
}
public interface retrofitinter
{
@GET("/213-4/")
Call<josntop> getResult(@Query("showapi_appid") String showapi_appid, @Query("topid") String topid, @Query("showapi_sign") String showapi_sign);
}
}
| |