原文地址声明:http://blog.csdn.net/qq_23179075/article/details/77740373
Retrofit2+RxJava2进行网络请求
Gradle中添加依赖:
compile
'io.reactivex.rxjava2:rxjava:2.1.2'
compile
'io.reactivex.rxjava2:rxandroid:2.0.1'
compile
'com.squareup.retrofit2:retrofit:2.3.0'
compile
'com.squareup.retrofit2:converter-gson:2.3.0'
compile
'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
compile
'com.squareup.okhttp3:okhttp:3.8.1'
compile
'com.squareup.okhttp3:logging-interceptor:3.8.1'
定义API接口:
public interface HttpApi {
@POST("api/authenticate")
Observable
<LoginResponse> login(@Body LoginRequest request
);
}
创建一个Retrofit客户端:
public class RetrofitProvider {
public static Retrofit
create() {
OkHttpClient
.Builder builder
= new OkHttpClient.Builder();
builder
.readTimeout(10, TimeUnit
.SECONDS
);
builder
.connectTimeout(10, TimeUnit
.SECONDS
);
if (BuildConfig
.DEBUG
) {
HttpLoggingInterceptor interceptor
= new HttpLoggingInterceptor();
interceptor
.setLevel(HttpLoggingInterceptor
.Level
.BODY
);
builder
.addInterceptor(interceptor
);
}
return new Retrofit.Builder()
.baseUrl(BASE_URL
)
.client(builder
.build())
.addConverterFactory(GsonConverterFactory
.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory
.create())
.build();
}
}
发起请求:
public class MainActivity extends AppCompatActivity {
@BindView(R
.id
.et_name
)
EditText etName
;
@BindView(R
.id
.et_password
)
EditText etPassword
;
@BindView(R
.id
.btn_login
)
Button btnLogin
;
private CompositeDisposable disposables
= new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState
) {
super.onCreate(savedInstanceState
);
setContentView(R
.layout
.activity_main
);
ButterKnife
.bind(this);
}
private void login(LoginRequest loginRequest
) {
HttpApi api
= RetrofitProvider
.create().create(HttpApi
.class);
api
.login(loginRequest
)
.subscribeOn(Schedulers
.io())
.observeOn(AndroidSchedulers
.mainThread())
.subscribe(new Observer<LoginResponse>() {
@Override
public void onSubscribe(Disposable d
) {
disposables
.add(d
);
}
@Override
public void onNext(LoginResponse loginResponse
) {
Log
.d("MainActivity", "登录成功:"+loginResponse
.toString());
}
@Override
public void onError(Throwable e
) {
Toast
.makeText(MainActivity
.this, "登录失败", Toast
.LENGTH_SHORT
).show();
}
@Override
public void onComplete() {
Toast
.makeText(MainActivity
.this, "登录成功", Toast
.LENGTH_SHORT
).show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
disposables
.clear();
}
@OnClick(R
.id
.btn_login
)
public void onViewClicked() {
LoginRequest request
= new LoginRequest();
request
.setUsername(etName
.getText().toString().trim());
request
.setPassword(etPassword
.getText().toString().trim());
login(request
);
}
}