retrofit之笔记内容

问题?

6.retrofit的原理:动态代理模式
5.retrofit的基本用法?
4.项目中的retrofit的使用情况(基本流程 和 文件和图片上传记录)?特殊:文件(和图片)上传
3.Retrofit各个注解的含义及作用?
2.android retrofit 请求参数格式RequestBody的方法
1.retrofit的模型?

====  

5.retrofit的基本用法:


public interface MovieService{
@GET("top250")
Call<MovieEntity> getTopMovie(@Query("start")int start,@Query("count") int count);
}
然后你还需要创建一个Retrofit对象:
public static final String baseUrl="https://api.douban.com/v2/movie/";
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();

再用这个Retrofit对象创建一个MovieService对象:
MovieService movieService=retrofit.create(MovieService.class);
Call<MovieEntity> call=movieService.getTopMovie(0,10);
//call.enqueue()异步请求,call.execute()同步请求
call.enqueue(new Callback<MovieEntity>(){
@Override
public void onResponse(Call<MovieEntity> call, Response<MovieEntity> response) {
result_TV.setText(response.body().toString());
}
@Override
public void onFailure(Call<MovieEntity> call, Throwable t) {
result_TV.setText(t.getMessage());
}
});
在这边还可以移除一个请求:
Retrofit 1.x版本没有直接取消正在进行中任务的方法的,在2.x的版本中,Service的模式变成Call的形式的原因是为了让正在进行的事务可以被取消。
要做到这点,只需要调用call.cancel()。
以上就是Retrofit2.0的基本用法了,下面讲讲它的详细用法:


4.项目中的retrofit的使用情况(基本流程 和 文件和图片上传记录)?

4.1项目中retrofit的使用流程:
public interface CommonApi {
@POST("common/getTime.htm")
Observable<BaseJson<Long>> getNetTime(@Body RequestBody requestBody);
}

public class UsualConfigModel extends BaseModel implements UsualConfigContract.Model {
@Override
public Observable<BaseJson<Long>> getNetTime(Map<String, Object> hashMap) {
Observable<BaseJson<Long>> observable = mRepositoryManager.obtainRetrofitService(CommonApi.class)
.getNetTime(ToRequestBodyUtil.toRequestBody(hashMap));
return observable;
}
}

public static RequestBody toRequestBody(Map<String, Object> map) {
String input = buildParams(map);
input = replaceURL(input);
//RequestBody requestBody = RequestBody.create(MediaType.parse("application/json, text/plain; charset=utf-8"), input);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"), input);
return requestBody;
}

public static RequestBody buildParamV2(Map<String, String> paramsMap, boolean isFilter) {
FormBody.Builder builder = new FormBody.Builder();
for (String key : paramsMap.keySet()) {
String value = paramsMap.get(key);
builder.add(key, value);// 追加表单信息
}
RequestBody formBody = builder.build();
//Request request = new Request.Builder().url(netUrl).post(formBody).build();
return formBody;
}

4.2. 项目中retrofit的文件(和图片)上传使用流程:
VisitApi的类:
/**
* @des: 会议详情--新增 :files 文件,图片上传等 : ("", param, files).then( ());
// 采用这种方式:
*/
@POST("record/meeting/saveRecordMeetingInfo.htm")
Observable<MeetDetail> newAddMeetDetail(@Body RequestBody body);

@Multipart
@POST("record/meeting/saveRecordMeetingInfo.htm")
Observable<BaseCode> newAddMeetDetailV1(@QueryMap Map<String, Object> usermaps, @Part List<MultipartBody.Part>fileMap,
@Part List<MultipartBody.Part>photoMap, @Part List<MultipartBody.Part> signMap);

@Multipart
@POST("record/meeting/saveRecordMeetingInfo.htm")
Observable<BaseCode> newAddMeetDetailV2(@QueryMap Map<String, Object> usermaps, @PartMap Map<String, RequestBody>fileMap,
@PartMap Map<String, RequestBody>photoMap, @PartMap Map<String, RequestBody> signMap);

/**
* @des: 会议修改的接口
*/
@Override
public Observable<MeetDetail> changedMeetDetail(Map<String, Object> hashMap, List<String> filePaths, List<String> photoPaths, List<String> signPaths) {
MultipartBody.Builder build = new MultipartBody.Builder();
for (Map.Entry<String, Object> entry : hashMap.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
build.addFormDataPart(key, String.valueOf(value));//
}
if (filePaths != null && filePaths.size() > 0) {
for (int i = 0; i < filePaths.size(); i++) {
File file = new File(filePaths.get(i));
RequestBody fileRQ = RequestBody.create(MediaType.parse("multipart/form-data"), file);
build.addFormDataPart("files", file.getName(), fileRQ);//
}
}
if (photoPaths != null && photoPaths.size() > 0) {
for (int i = 0; i < photoPaths.size(); i++) {
File file = new File(photoPaths.get(i));
RequestBody fileRQ = RequestBody.create(MediaType.parse("image/*"), file);
build.addFormDataPart("photos", file.getName(), fileRQ);
}
}
MultipartBody body=build.build(); //MultipartBody继承RequestBody
Observable<MeetDetail> observable = mRepositoryManager.obtainRetrofitService(VisitApi.class)
.changedMeetDetail(body);
return observable;
}

// 不适合的方法:
public Observable<BaseCode> changedMeetDetail2(Map<String, Object> hashMap, List<String> filePaths, List<String> photoPaths, List<String> signPaths) {
List<MultipartBody.Part> parts1=new ArrayList<>();
if (filePaths != null && filePaths.size() > 0) {
for (int i = 0; i < filePaths.size(); i++) {
File file = new File(filePaths.get(i));
RequestBody fileRQ = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("files", file.getName(), fileRQ);
parts1.add(part);
}
}else {
MultipartBody.Part part = MultipartBody.Part.createFormData("","");//直接传入两个空字符串就可以了...不能传null;
parts1.add(part);
}

List<MultipartBody.Part> parts2=new ArrayList<>();
if (photoPaths != null && photoPaths.size() > 0) {
for (int i = 0; i < photoPaths.size(); i++) {
File file = new File(photoPaths.get(i));
RequestBody fileRQ = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("photos", file.getName(), fileRQ);
parts2.add(part);
}
}else {
MultipartBody.Part part = MultipartBody.Part.createFormData("","");//直接传入两个空字符串就可以了...不能传null;
parts2.add(part);
}
Observable<BaseCode> observable = null;
// Observable<BaseCode> observable= mRepositoryManager.obtainRetrofitService(VisitApi.class)
// .changedMeetDetail(hashMap, parts1, parts2, parts3);
return observable;
}

猜你喜欢

转载自www.cnblogs.com/awkflf11/p/12541221.html