因为retrofit2+rxjava的结合使用是现在主流的使用方法,所以最近在网上翻阅好多相关资料,现在整理如下.

  1.创建一个实体类

   

public class demobean {    private String login;    private int id;
}
   
2.创建一个获取返回数据的泛型(就是对返回数据的封装解析)
   
public class BaseRequest<T> {    @SerializedName("data")  //这个就类似 {data:[{}],code:} 就是头    public List<T> managerList;  //这个就是对应的写法封装    @SerializedName("msg")    public String msg;}
   
3.创建请求网络的封装类(个人封装)
   
public class RetrofitGen {    public static String BASE_URL = "这里填的是主机头部分";    public static <T> T create(final Class<T> cls) {        Retrofit.Builder builder = new Retrofit.Builder();        Retrofit retrofit = builder                .baseUrl(BASE_URL)//注意此处,设置服务器的地址                .addConverterFactory(GsonConverterFactory.create())//用于Json数据的转换,非必须                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//用于返回Rxjava调用,非必须                .build();        return retrofit.create(cls);    }}

   
   
4.创建一个请求网址的接口包括get请求和post请求
下面的可以填写实体类demobean 也可以填写ResponseBody
   
   
@Query 表示这是一个参数
@Body 表示将requestBean对象转成成json string作为参数传递给后台
@QueryMap 表示将map类型的params对象,转成键值对的形式作为参数传递给后台
public interface Api {
  //这里就是填写下面的东西
}   
   
retrofit2:
get请求
   
@GET("这里填除掉主机头部分后面的")Call<demobean> getApitest(@Query("demo") String h1, @Query("demo1") String h2);
//getApi方法,等效于: http://192.168.8.202:8082/这里填除掉主机头部分后面的?demo=h1&demo1=h2
   
@GET("这里填除掉主机头部分后面的")Call<demobean> getApiStringtest(@QueryMap Map params);

post请求
@POST("这里填除掉主机头部分后面的")Call<demobean> postApiString(@Body demobean requestBean);
@POST("这里填除掉主机头部分后面的")Call<demobean> postApi(@Body demobean requestBean);

//这里的是文件上传
//这个是单文件上传格式@Multipart@POST("这里填除掉主机头部分后面的")Call<ResponseBody> uploadSimpleFile(@Part MultipartBody.Part file);//多文件上传@Multipart@POST("这里填除掉主机头部分后面的")Call<ResponseBody> uploads(@PartMap MapRequestBody> params);

还可以这样写
这里都是get请求:post同理
Call> retrofits(@Path("hjc") String v1, @Path("hjc1") String v2);
Observable> RxJavas(@Path("hjc") String v1, @Path("hjc1") String v2);

rxjava:
//Observable 是RxJava的关键点,其他不变
get请求:
   
@GET("这里填除掉主机头部分后面的")Observable<demobean> getRxJavaApi(@QueryMap Map params);

post请求:
   
@POST("这里填除掉主机头部分后面的")Observable<demobean> postRxJavaApi(@Body Contributor requestBean);

5.使用
   
现在是rxjava+retrofit2结合使用请求服务器
   
get请求传参数:
   
Api api = RetrofitGen .create(Api.class);// Api api = retrofit.create(Api.class);      api.getApitest("square","retrofit")//填写参数              .subscribeOn(Schedulers.io())//开启线程              .observeOn(AndroidSchedulers.mainThread())              .subscribe(new Subscriber<BaseRequest<List>>() {                  @Override                  public void onCompleted() {                  }                  @Override                  public void onError(Throwable e) {                  }                  @Override                  public void onNext(BaseRequest<List> contributors) {
                        //获得返回数据
                               for (demo c : contributors){                                   Log.e("c",c.getLogin()+c.getContributions()+c.getId());                                   tv_showen.setText(c.getLogin()+c.getContributions()+c.getId()+ "");                               }                  }              });

retrofit2 使用:
 Call<BaseRequest>>call = api.contributors("square","retrofit");
   
call.enqueue(new Callback>() {    @Override    public void onResponse(Call> call, Response> response) {        tv_showen.setText(response.body().toString());            @Override    public void onFailure(Call> call, Throwable t) {          }});
   
键值对请求方法
   
Map params = new HashMap<>();params.put("111", "vvv");params.put("222", "vvv2");Call apiString = api.getApiString(params);apiString.enqueue(new Callback() {    @Override    public void onResponse(Call call, Response response) {        Log.e("", "");        try {            Log.e("response",response.body().string());        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void onFailure(Call call, Throwable t) {        Log.e("", "");    }});

post请求
   
   demobean requestBean = new demobean();        requestBean.key1 = "KEY1";        requestBean.key2 = "KEY2";        requestBean.key3 = "KEY3";        requestBean.key4 = "KEY4";        Call<BaseRequest> postApi = api.postApi(requestBean);        postApi.enqueue(new Callback<BaseRequest>() {            @Override            public void onResponse(Call<BaseRequest> call, Response<BaseRequest> response) {                Log.e("", "");                           }            @Override            public void onFailure(Call<BaseRequest> call, Throwable t) {                Log.e("", "");                         }        });
        Call postApiString = api.postApiString(requestBean);        postApiString.enqueue(new Callback() {            @Override            public void onResponse(Call call, Response response) {                Log.e("", "");                           @Override            public void onFailure(Call call, Throwable t) {                Log.e("", "");                          }        });*//*rx的使用*//*        api.getRxApiString(params)                .subscribeOn(Schedulers.newThread())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber() {                    @Override                    public void onCompleted() {                                           }                    @Override                    public void onError(Throwable e) {                                            }                    @Override                    public void onNext(ResponseBody responseBody) {                      //接收到数据的                    }                });
        api.postRxApiString(requestBean).subscribeOn(Schedulers.newThread())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber() {                    @Override                    public void onCompleted() {                                          }                    @Override                    public void onError(Throwable e) {                                           }                    @Override                    public void onNext(RApiService.ResponseBean responseBody) {                                            }                });

//上传单个文件
   
File file = new File("/sdcard/", "xxx");    //file    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);    //监听上传进度    CountingRequestBody countingRequestBody = new CountingRequestBody(requestFile, new CountingRequestBody.Liste    @Override    public void onRequestProgress(long bytesWritten, long contentLength) {        tvFile.setText("上传进度:" + contentLength + ":" + bytesWritten);    }});        MultipartBody.Part body =        MultipartBody.Part.createFormData("file", file.getName(),countingRequestBody);        Api api= new Api("主机头部分");        Call responseBodyCall = api.uploadSimpleFile(body);        responseBodyCall.enqueue(new Callback() {@Overridepublic void onResponse(Call call, Response response) {        tv_showen.setText("上传成功");        }@Overridepublic void onFailure(Call call, Throwable t) {        tv_showen.setText(t.toString());        }        });

//多文件上传
   
private void initData() {        //保证文件按顺序上传 使用LinkedHashMap        params = new LinkedHashMap<>();        File file1 = new File("/sdcard/", "xxx");final RequestBody requestBody1 = RequestBody.create(MediaType.parse("multipart/form-data"), file1);        //监听上传进度        CountingRequestBody countingRequestBody1 = new CountingRequestBody(requestBody1, new CountingRequestBody.Listener() {@Overridepublic void onRequestProgress(long bytesWritten, long contentLength) {        tv_showen.setText("上传进度:" + contentLength + ":" + bytesWritten);        }        });        params.put("file\";filename=\"" + file1.getName(), countingRequestBody1);        File file2 = new File("/sdcard/", "xxx");        RequestBody requestBody2 = RequestBody.create(MediaType.parse("multipart/form-data"), file2);        //监听上传进度        CountingRequestBody countingRequestBody2 = new CountingRequestBody(requestBody2, new CountingRequestBody.Listener() {@Overridepublic void onRequestProgress(long bytesWritten, long contentLength) {        tv_showen.setText("上传进度:" + contentLength + ":" + bytesWritten);        }        });        params.put("file\";filename=\"" + file2.getName(), countingRequestBody2);       Api api= new Api("主机头部分");        btnUpload.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {        Call responseBodyCall = api.uploadMultiFiles(params);        responseBodyCall.enqueue(new Callback() {@Overridepublic void onResponse(Call call, Response response) {        tv_showen.setText("上传成功");        tv_showen.setText("上传成功");        }@Overridepublic void onFailure(Call call, Throwable t) {        }        });        }        });        }

就到此结束了 如果出现有问题,希望大家多多反馈 谢谢
   
   
   

更多相关文章

  1. android+django交互数据(同时上传图片与文字)
  2. Android入门:用HttpClient模拟HTTP的GET和POST请求
  3. android 网络通信(三):Retrofit 2.0 的使用
  4. Android(安卓)集成微信sdk 实现微信登录
  5. Android(安卓)开发 框架系列 OkHttp使用详解
  6. Android(安卓)9.0 适配
  7. Android(安卓)Day05-网络编程之提交数据
  8. android cookie 使用
  9. Android(安卓)源码 图形系统之请求布局

随机推荐

  1. Android RxJava:基础介绍与使用
  2. Android画图方式
  3. android中如何创建Service
  4. Android(安卓)Service之bindService()
  5. Android(安卓)kernel x86 编译方法
  6. Android之父:后乔布斯时代的苹果依然会很
  7. Android Framework architecture -- blue
  8. Android adb功能使用方法
  9. Android开发学习1 - Android架构
  10. 值得推荐的Android App (一)