package com.baway.zhengwenjie20171104.net;
import android.util.Log;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by zwj on 2017/11/4.
*/
public class RetrofitUtil {
private static RetrofitUtil retrofitUtil;
private RetrofitUtil() {
}
public static RetrofitUtil getInstance() {
if (retrofitUtil == null) {
synchronized (RetrofitUtil.class) {
if (retrofitUtil == null) {
retrofitUtil = new RetrofitUtil();
}
}
}
return retrofitUtil;
}
private static Retrofit retrofit;
public static synchronized Retrofit getRetrofit(String url) {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
Log.i("xxx", message);
}
});
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).connectTimeout(3000, TimeUnit.SECONDS).build();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
return retrofit;
}
public <T> T getApiService(String url, Class<T> cl) {
Retrofit retrofit = getRetrofit(url);
return retrofit.create(cl);
}
}
----------ApiService接口---------------------
package com.bewei.retrofitandrxjava.inter;
import com.bewei.retrofitandrxjava.bean.News;
import com.bewei.retrofitandrxjava.bean.User;
import retrofit2.http.GET;
import retrofit2.http.Path;
import rx.Observable;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2017/11/3 10:13
*/
public interface ApiService {
/**
* 结合Retrofit+RxJava
* thtp://service.meiyinkeqiu.com/service/ads/cptj
* @param
* @return
*/
@GET("ads/cptj")
Observable<News> getNoParams();
/**
* 结合RxJava
* @param user
* @return
* https://api.github.com/users/forever/
*/
@GET("users/{user}")
Observable<User> getHasParams(@Path("user")String user);
}
---------------ApiServive接口不加RxJava(参数拼接参考)--------------
package com.bewei.retrofit.inter;
import com.bewei.retrofit.R;
import com.bewei.retrofit.bean.News;
import com.bewei.retrofit.bean.Party;
import com.bewei.retrofit.bean.User;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
/**
* 1. 类的用途 网络接口
* 2. @author forever
* 3. @date 2017/11/1 14:32
*/
public interface ApiService {
/**
* 无参get请求
* http://service.meiyinkeqiu.com/service/ads/cptj
*
* @return
*/
@GET("service/ads/cptj")
Call<News> getNoParams();
/**
* 有参get请求
* 拼接参数 /形式
*
* @return https://api.github.com/users/baiiu
*/
@GET("users/{user}")
Call<User> getHasParams(@Path("user") String user);
/**
* http://www.93.gov.cn/93app/data.do
* channelId
* startNum
* 拼接 ? &
* 为主
*/
@GET("data.do")
Call<Party> getHasParams2(@Query("channelId")int channelId, @Query("startNum") int startNum );
/**
* post请求 http://120.27.23.105/user/reg 注册
*/
@POST("reg")
@FormUrlEncoded//支持表单提交
Call<User> register(@Field("mobile")String mobile,@Field("password")String password);
/**
* 上传图片 参数只有一个 File
* @param
* @param file
* @return
*/
@Multipart
@POST("08web/FileUploadServlet")
Call<User> uploadPic( @Part MultipartBody.Part file);
/**
* 上传图片 参数有2个 uid file
* @param
* @param file
* @return
*/
@Multipart
@POST("file/upload")
Call<User> uploadPic2(@Part("uid")RequestBody uid, @Part MultipartBody.Part file);
}
--------------进行网络请求Model--------------------
public void getData(final OnFinish onFinish, String lx, String page) {
ApiService apiService = RetrofitUtil.getInstance().getApiService(Api.XW, ApiService.class);
Observable<List<JavaBean>> observable = apiService.getHasParams(lx,page);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<JavaBean>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<JavaBean> javaBeen) {
onFinish.onSuccess(javaBeen);
}
});
}