Android RetrofitとRxandroidの使用
7840 ワード
Retrofit
Retrofitは、RESTfulアーキテクチャのAndroid(Java)クライアント実装であり、注釈に基づいて、JSON to POJO(Plain Ordinary Java Object、簡易Javaオブジェクト)、POJO to JSON、ネットワークリクエスト(POST、GET、PUT、DELETEなど)パッケージを提供する.
Rxandroid Rxは応答式プログラミングの意味である、本質は観察者モードであり、観察者(Observer)とサブスクライバ(Subscriber)をベースとした非同期応答方式である.Androidプログラミングではバックグラウンドスレッドがよく使われますが、次の例を参照してください.
最後にActivity(必要に応じて)で呼び出す
依存パッケージcompile'ioを追加します.reactivex:rxandroid:1.1.0’ compile ‘io.reactivex:rxjava:1.1.0’ compile ‘com.squareup.retrofit:retrofit:2.0.0-beta2’ compile ‘com.squareup.retrofit:converter-gson:2.0.0-beta2’ compile ‘com.squareup.retrofit:adapter-rxjava:2.0.0-beta2’
Retrofitは、RESTfulアーキテクチャのAndroid(Java)クライアント実装であり、注釈に基づいて、JSON to POJO(Plain Ordinary Java Object、簡易Javaオブジェクト)、POJO to JSON、ネットワークリクエスト(POST、GET、PUT、DELETEなど)パッケージを提供する.
Rxandroid Rxは応答式プログラミングの意味である、本質は観察者モードであり、観察者(Observer)とサブスクライバ(Subscriber)をベースとした非同期応答方式である.Androidプログラミングではバックグラウンドスレッドがよく使われますが、次の例を参照してください.
/** * */
public class IpInfo {
public String country;
public String country_id;
public String area;
public String area_id;
public String ip;
}
public class BaseResponse {
public int code;
}
public class GetIpInfoResponse extends BaseResponse {
public IpInfo data;
}
/** * :cover on 2016/5/25 11:22 * :[email protected] */
public class ServiceFactory {
public static final String BASE_URL = "http://ip.taobao.com";
private Retrofit mRetrofit;
private static ServiceFactory mInstance;
private ApiService apiService;
public static ServiceFactory getmInstance() {
if (mInstance == null) {
synchronized (ServiceFactory.class) {
mInstance = new ServiceFactory();
}
}
return mInstance;
}
private ServiceFactory() {
createSignRetrofit();
}
//mRetrofit
private void createSignRetrofit() {
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
public ApiService getapiService() {
if (apiService == null) {
apiService = mRetrofit.create(ApiService.class);
}
return apiService;
}
}
/** * */
public interface ApiService {
/* @GET("service/getIpInfo.php") Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);*/
@GET("service/getIpInfo.php")
Observable<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
}
最後にActivity(必要に応じて)で呼び出す
public class MainActivity extends AppCompatActivity {
private static final String ENDPOINT = "http://ip.taobao.com";
private TextView mTvContent;
private ProgressBar mProgressBar;
private ServiceFactory serviceFactory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mTvContent = (TextView) findViewById(R.id.tv_content);
//
serviceFactory=ServiceFactory.getmInstance();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
serviceFactory.getapiService().getIpInfo("63.223.108.42")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<GetIpInfoResponse>() {
@Override
public void onCompleted() {
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onError(Throwable e) {
mProgressBar.setVisibility(View.GONE);
mTvContent.setText(e.getMessage());
}
@Override
public void onNext(GetIpInfoResponse getIpInfoResponse) {
mTvContent.setText(getIpInfoResponse.data.country);
}
});
}
});
}
}
依存パッケージcompile'ioを追加します.reactivex:rxandroid:1.1.0’ compile ‘io.reactivex:rxjava:1.1.0’ compile ‘com.squareup.retrofit:retrofit:2.0.0-beta2’ compile ‘com.squareup.retrofit:converter-gson:2.0.0-beta2’ compile ‘com.squareup.retrofit:adapter-rxjava:2.0.0-beta2’