今天的任务是熟悉一下Retrofit。。网上找了点资料领完写了个Demo
找了个URL:https://api.douban.com/v2/book/search?q=%E9%87%91%E7%93%B6%E6%A2%85&tag=&start=0&count=1
用到了
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.okhttp3:okhttp:3.4.0'这三个东西
另外还有一个Android studio的插件GsonFormat这个东西简直赞。。
添加GsonFormat: 左上角File---》Setting---》左上角搜Plugins---》右边下方找到Browse repositories按钮-----》搜索框内输GsonFormat然后安装重启后就可以使用了
如本例中的URL,新建一个空类Book,然后Alt+Insert,选择GsonFormat,把url里得到的一大筐东西复制进去,一直点OK,哦豁妖孽了,自动就生成了封装
好像说这个Retrofit可以自动的去匹配。。暂时也不是很清楚,
写个接口
package com.example.zhaoyulu_sx_test.test; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; /** * Created by zhaoyulu_sx on 2017/7/28. */ 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); }
就是上面这样,里面有很多注解@Query是用来拼接请求的,这个@GET说明咱们这是个http get请求,当然这个注解还有很多内容,有空接着看
下面就可以开始activity里的代码了
package com.example.zhaoyulu_sx_test.test; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.google.gson.GsonBuilder; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends AppCompatActivity { private Button test_bt; private TextView text_tv; private Retrofit retrofit; private RetrofitService service; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); retrofit = new Retrofit.Builder() .baseUrl("https://api.douban.com/v2/") .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create())) .build(); service= retrofit.create(RetrofitService.class); test_bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Call<Book> call = service.getSearchBook("金瓶梅", null, 0, 1); call.enqueue(new Callback<Book>() { @Override public void onResponse(Call<Book> call, Response<Book> response) { text_tv.setText(response.body()+""); } @Override public void onFailure(Call<Book> call, Throwable t) { } }); } }); } private void initView(){ test_bt=(Button)findViewById(R.id.test_bt); text_tv=(TextView) findViewById(R.id.test_tv); } }
这里妖孽的红色就是retrofit的相关的代码,好像项目中进行了封装?并没有看到新建Retrofit类,多半单例模式?需要详细看,然后按一下,到这里一个简单的Retrofit demo就实现了,下面是源码地址
源码地址
https://github.com/zhaoyulu/RetrofitDemo