1,如果不太了解retrofit的同學可以先去官網學習一下簡單使用:http://square.github.io/retrofit/,這里我們以一個簡單的Get請求的例子來練習一下
2,https://api.douban.com/v2/movie/top250?start=0&count=10 目標地址,由於數據太多我就不再啰嗦數據解析了,如果覺得Gson數據麻煩的話可以使用GsonFormat插件,先來看看怎么添加依賴吧
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.qianmo.retrofitdemo" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.0.0' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:7.0.1' //這里其實只需要添加下面的這幾個就可以了 compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:7.0.1 }
2,看一下我們的布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.qianmo.retrofitdemo.MainActivity"> <TextView android:id="@+id/tv_show" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="還沒有數據"/> <Button android:id="@+id/btn_request" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="32dp" android:text="請求網絡數據"/> </RelativeLayout>
再看看我們的Activity
package com.qianmo.retrofitdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.qianmo.retrofitdemo.entry.MovieEntity; import com.qianmo.retrofitdemo.http.MovieService; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends AppCompatActivity { @Bind(R.id.tv_show) TextView tvShow; @Bind(R.id.btn_request) Button btnRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn_request}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_request: getMovie(); break; } } //請求網絡數據 private void getMovie() { } }
由於是網絡請求,所以千萬別忘記網絡請求權限
接下來為我們的數據創建一個bean,MovieBean,代碼太多了,就不貼了,然后就開始創建我們的service接口,由於是get請求的基本語法,所以就沒什么可以講解的
package com.qianmo.retrofitdemo.http; import com.qianmo.retrofitdemo.entry.MovieEntity; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; /** * Created by wangjitao on 2016/11/3 0003. * 獲取電影列表接口 */ public interface MovieService { @GET("top250") Call<MovieEntity> getTopMovie(@Query("start") int start ,@Query("count") int count); }
在Activity中使用
String baseUrl = "https://api.douban.com/v2/movie/"; //創建Retrofit對象 Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); MovieService movieService = retrofit.create(MovieService.class); Call<MovieEntity> call = movieService.getTopMovie(0, 10); call.enqueue(new Callback<MovieEntity>() { @Override public void onResponse(Call<MovieEntity> call, Response<MovieEntity> response) { tvShow.setText(response.body().getTitle()); } @Override public void onFailure(Call<MovieEntity> call, Throwable t) { tvShow.setText(t.getMessage()); } });
首先創建Retrofit對象,然后在創建Call對象,這樣我們就可以請求網絡數據了,感覺很簡單啊 有木有·····