我也是刚开始接触Retrofit框架,之前自己用的Volly框架,有点老了.所以看了一下Retrofit发现Retrofit只是使用还是很简单的,作为一个英语渣看源码实在是有点难.
- 使用之前在项目build.gradle文件里面添加依赖
compile 'io.reactivex:rxandroid:1.1.0' compile 'io.reactivex:rxjava:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.picasso:picasso:2.3.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
这是我项目里添加的依赖文件. - Retrofit只需要创建一个借口描述http请求,就可以像调用java方法一样请求api了.
public interface MyService { public static final String WORD_URL="http://dict-co.iciba.com/api/"; @GET("dictionary.php?") Call getWord(@Query("w") String word, @Query("type") String type,@Query("key")String key); }
- 在主代码使用:创建一个Retrofit对象
Retrofit retrofit = new Retrofit.Builder().baseUrl(MyService.WORD_URL) .addConverterFactory(GsonConverterFactory.create()).build();
再利用retrofit创建一个接口对象也就是上面的MyService对象MyService service = retrofit.create(MyService.class);
创建Call对象将我们需要填写的参数写进去Call<Word> call =service.getWord(word,"json","8EFA692F30DA14703C5346CD2C52FCEC");
最后调用方法call.enqueue(this);
enqueue()这个方法是异步发送http请求 - 实现Callback接口实现
@Override public void onResponse(Call<Word> call, Response<Word> response) { List<Word.SymbolsBean> word = response.body().getSymbols(); Word.SymbolsBean bean = word.get(0); String result = bean.getParts().toString(); //String result = word.getSymbols().get(0).getParts().toString(); Log.i("TAG",result); textView_result.setText(result); } @Override public void onFailure(Call<Word> call, Throwable t) { Log.i("TAG","onFailure"); }
这两个方法就可以了.