//导入依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
MainActivity代码
public class MainActivity extends AppCompatActivity {
private TextView text;
Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
}
public void getbtn(View view){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.douban.com/v2/")
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
.build();
RetrofitService service = retrofit.create(RetrofitService.class);
Call<Book> call = service.getSearchBook("金瓶梅", null, 0, 1);
call.enqueue(new Callback<Book>() {
private String s;
@Override
public void onResponse(Call<Book> call, Response<Book> response) {
s = response.body().toString();
text.setText(s);
}
@Override
public void onFailure(Call<Book> call, Throwable t) {
}
});
}
}
//定义一个接口
实体类已经建好了,我们来看看这个Retrofit如何进行网络请求,其实代码也很简单。首先我们需要定义一个接口,取名RetrofitService
额。。想必有人要问了,这是什么玩意?跟我们平时定义的接口类很像,但又不一样。别心急,我来一一解释下,和别的接口类一样,我们在其中定义了一个方法
getSearchBook
,那么这个方法是做什么的呢?其实它干的事很简单,就是拼接一个URL然后进行网络请求。这里我们拼接的URL就是上文提到的测试URL:https://api.douban.com/v2/book/search?q=金瓶梅&tag=&start=0&count=1
。聪明的你一定看出来了,在这个URL中book/search就是GET后的值,而?后的q、tag、start、count等入参就是这个方法的入参。有的朋友可能要问了,https://api.douban.com/v2/
这么一大串跑哪去了?其实我们在进行网络请求时,在URL中前一部分是相对不变的。什么意思呢,比如你打开间书
网站,在间书
中你打开不同的网页,虽然它的URL不同,但你会发现,每个URL前面都是以http://www.jianshu.com/
开头,我们把这个不变的部分,也叫做baseUrl提出来,放到另一个地方,在下面我们会提到。这样我们一个完整的URL就拼接好了。在方法的开头我们可以看到有个GET的注释,说明这个请求是GET方法,当然你也可以根据具体需要用POST、PUT、DELETE以及HEAD。他们的区别如下:
- GET ----------查找资源(查)
- POST --------修改资源(改)
- PUT ----------上传文件(增)
- DELETE ----删除文件(删)
- HEAD--------只请求页面的首部
public interface RetrofitService {
@GET("book/search")
Call<Book> getSearchBook(@Query("q") String name,
@Query("tag") String tag,
@Query("start") int start,
@Query("count") int count);
}
//Bean类就不在此展示了,自己找接口测试,以及布局文件