diff --git a/RxHttp/build.gradle b/RxHttp/build.gradle index 23e2e89..5a296c5 100644 --- a/RxHttp/build.gradle +++ b/RxHttp/build.gradle @@ -53,7 +53,7 @@ dependencies { // rxbus - api 'com.github.eajon:rxbus2:1.3.5' + api 'com.github.eajon:rxbus2:1.3.6' api 'io.reactivex.rxjava2:rxandroid:2.1.0' diff --git a/RxHttp/src/main/java/com/github/eajon/RxHttp.java b/RxHttp/src/main/java/com/github/eajon/RxHttp.java index 3cf7a1a..5ab4c6e 100644 --- a/RxHttp/src/main/java/com/github/eajon/RxHttp.java +++ b/RxHttp/src/main/java/com/github/eajon/RxHttp.java @@ -19,6 +19,7 @@ import com.github.eajon.upload.UploadRequestBody; import com.github.eajon.util.GsonUtils; import com.github.eajon.util.NetUtils; +import com.github.eajon.util.ReflectUtils; import com.github.eajon.util.RetrofitUtils; import com.github.eajon.util.RxBusUtils; import com.github.eajon.util.RxUtils; @@ -230,7 +231,7 @@ private Disposable doUpload() { UploadTask uploadTask = ( UploadTask ) task; file = uploadTask.getFile(); requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); - MultipartBody.Part part = MultipartBody.Part.createFormData(uploadTask.getName(), uploadTask.getFileName(), new UploadRequestBody(requestBody, tag, isStick, uploadTask)); + MultipartBody.Part part = MultipartBody.Part.createFormData(uploadTask.getName(), NetUtils.getHeaderValueEncoded(uploadTask.getFileName()).toString(), new UploadRequestBody(requestBody, tag, isStick, uploadTask)); observable = RetrofitUtils.get().getRetrofit(getBaseUrl()).upload(disposeApiUrl(), convertParameter(), header, part); } else { MultiUploadTask multiUploadTask = ( MultiUploadTask ) task; @@ -238,7 +239,7 @@ private Disposable doUpload() { UploadTask task = multiUploadTask.getUploadTasks().get(i); file = task.getFile(); requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); - MultipartBody.Part part = MultipartBody.Part.createFormData(task.getName(), task.getFileName(), new UploadRequestBody(requestBody, tag, isStick, task, multiUploadTask)); + MultipartBody.Part part = MultipartBody.Part.createFormData(task.getName(), NetUtils.getHeaderValueEncoded(task.getFileName()).toString(), new UploadRequestBody(requestBody, tag, isStick, task, multiUploadTask)); partList.add(part); } observable = RetrofitUtils.get().getRetrofit(getBaseUrl()).upload(disposeApiUrl(), convertParameter(), header, partList); @@ -270,15 +271,20 @@ private Disposable subscribe(Observable observable) { httpObserver = new HttpObserver() { @Override public void onSuccess(Object o) { - RxBusUtils.sendBus(tag, isStick, o); + RxBusUtils.sendBus(tag, o, isStick); } @Override public void onError(ApiException t) { - RxBusUtils.sendBus(tag, isStick, t); + RxBusUtils.sendBus(tag, t, isStick); } }; } + + //如果没有设置type获取泛型type + if (type == null) { + type = ReflectUtils.getParameterizedType(httpObserver); + } if (dialog != null || dialogContext != null) { dialogObserver(observable).subscribe(httpObserver); } else { diff --git a/RxHttp/src/main/java/com/github/eajon/download/DownloadResponseBody.java b/RxHttp/src/main/java/com/github/eajon/download/DownloadResponseBody.java index 0f7aa8e..9cfc2b0 100644 --- a/RxHttp/src/main/java/com/github/eajon/download/DownloadResponseBody.java +++ b/RxHttp/src/main/java/com/github/eajon/download/DownloadResponseBody.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import com.github.eajon.task.DownloadTask; +import com.github.eajon.util.RxBusUtils; import java.io.IOException; @@ -110,7 +111,7 @@ public long read(Buffer sink, final long byteCount) throws IOException { } downloadTask.setCurrentSize(readBytesCount); downloadTask.setTotalSize(totalBytesCount); - downloadTask.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, downloadTask, isStick); return bytesRead; } }; diff --git a/RxHttp/src/main/java/com/github/eajon/function/HttpResponseFunction.java b/RxHttp/src/main/java/com/github/eajon/function/HttpResponseFunction.java index a9a696e..e0985a6 100644 --- a/RxHttp/src/main/java/com/github/eajon/function/HttpResponseFunction.java +++ b/RxHttp/src/main/java/com/github/eajon/function/HttpResponseFunction.java @@ -25,7 +25,7 @@ public HttpResponseFunction(Type type) { } @Override - public Object apply(@NonNull JsonElement response) throws Exception { + public Object apply(@NonNull JsonElement response) { //打印服务器回传结果 LoggerUtils.json(response.toString()); /*此处不再处理业务相关逻辑交由开发者重写httpCallback*/ @@ -33,7 +33,7 @@ public Object apply(@NonNull JsonElement response) throws Exception { if (response.isJsonPrimitive()) { return response.getAsString(); } else if (response.isJsonNull()) { - return JsonNull.INSTANCE; + return JsonNull.INSTANCE.toString(); } else { return response.toString(); } diff --git a/RxHttp/src/main/java/com/github/eajon/task/BaseTask.java b/RxHttp/src/main/java/com/github/eajon/task/BaseTask.java index 2088103..b526b38 100644 --- a/RxHttp/src/main/java/com/github/eajon/task/BaseTask.java +++ b/RxHttp/src/main/java/com/github/eajon/task/BaseTask.java @@ -1,9 +1,6 @@ package com.github.eajon.task; -import android.text.TextUtils; - import com.github.eajon.util.SpeedUtils; -import com.threshold.rxbus2.RxBus; import java.util.concurrent.TimeUnit; @@ -22,6 +19,10 @@ public enum State { CANCEL, //取消 } + private long startTime; + private long finishTime; + + private State state = State.NONE;//下载状态 private long speed; @@ -34,9 +35,21 @@ public void setState(State state) { this.state = state; if (state != State.LOADING) { this.speed = 0; + } else { + startTime = System.currentTimeMillis(); + } + if (state == State.FINISH) { + finishTime = System.currentTimeMillis(); } } + public long getDuration() { + if (finishTime == 0L) { + return System.currentTimeMillis() - startTime; + } + return finishTime - startTime; + } + public long getSpeed() { return speed; } @@ -50,10 +63,30 @@ public String getSpeedFormat() { } + public String getSpeedFormat(TimeUnit timeUnit) { return SpeedUtils.formatSpeed(speed, timeUnit); } + public float getAverageSpeed(long currentSize) { + long dur = getDuration(); + if (currentSize != 0 && dur != 0) { + float speed = 1000F * currentSize / dur; + return speed; + } else { + return 0F; + } + + } + + public String getAverageSpeedFormat(long currentSize) { + return SpeedUtils.formatSpeedPerSecond(getAverageSpeed(currentSize)); + } + + public String getAverageSpeedFormat(long currentSize, TimeUnit timeUnit) { + return SpeedUtils.formatSpeed(getAverageSpeed(currentSize), timeUnit); + } + public boolean isFinish() { return state == State.FINISH; } @@ -62,20 +95,5 @@ public boolean isError() { return state == State.ERROR; } - public void sendBus(String tag, boolean isStick) { - if (isStick) { - RxBus.getDefault().removeStickyEventType(this.getClass()); - if (TextUtils.isEmpty(tag)) { - RxBus.getDefault().postSticky(this); - } else { - RxBus.getDefault().postSticky(tag, this); - } - } else { - if (TextUtils.isEmpty(tag)) { - RxBus.getDefault().post(this); - } else { - RxBus.getDefault().post(tag, this); - } - } - } + } diff --git a/RxHttp/src/main/java/com/github/eajon/task/DownloadTask.java b/RxHttp/src/main/java/com/github/eajon/task/DownloadTask.java index 7416bae..061d240 100644 --- a/RxHttp/src/main/java/com/github/eajon/task/DownloadTask.java +++ b/RxHttp/src/main/java/com/github/eajon/task/DownloadTask.java @@ -3,6 +3,7 @@ import android.os.Environment; import java.io.Serializable; +import java.util.concurrent.TimeUnit; public class DownloadTask extends BaseTask implements Serializable { @@ -13,10 +14,12 @@ public class DownloadTask extends BaseTask implements Serializable { private String localDir;//本地存储目录 private long totalSize;//文件大小 private long currentSize;//当前大小 + private long rangeSize;//纪录上次下载位置 public DownloadTask() { this.localDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); } + public DownloadTask(String name) { this.name = name; this.localDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); @@ -27,6 +30,14 @@ public DownloadTask(String name, String localDir) { this.localDir = localDir; } + @Override + public void setState(State state) { + super.setState(state); + if (state == State.PAUSE) { + rangeSize = currentSize; + } + + } public String getName() { return name; @@ -71,21 +82,36 @@ public void setCurrentSize(long currentSize) { public int getProgress() { if (totalSize != 0) { - float progress = (float) currentSize / (float) totalSize; - return (int) (progress * 100); + float progress = ( float ) currentSize / ( float ) totalSize; + return ( int ) (progress * 100); } else { return 0; } } + public float getAverageSpeed() { + return getAverageSpeed(currentSize - rangeSize); + + } + + public String getAverageSpeedFormat() { + return getAverageSpeedFormat(currentSize - rangeSize); + } + + public String getAverageSpeedFormat(TimeUnit timeUnit) { + return getAverageSpeedFormat(currentSize - rangeSize, timeUnit); + } + @Override public String toString() { return "DownloadTask{" + "name='" + name + '\'' + + ", originalName='" + originalName + '\'' + ", localDir='" + localDir + '\'' + ", totalSize=" + totalSize + ", currentSize=" + currentSize + + ", rangeSize=" + rangeSize + '}'; } } diff --git a/RxHttp/src/main/java/com/github/eajon/task/MultiUploadTask.java b/RxHttp/src/main/java/com/github/eajon/task/MultiUploadTask.java index e1736a3..6d67079 100644 --- a/RxHttp/src/main/java/com/github/eajon/task/MultiUploadTask.java +++ b/RxHttp/src/main/java/com/github/eajon/task/MultiUploadTask.java @@ -2,10 +2,11 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.concurrent.TimeUnit; public class MultiUploadTask extends BaseTask implements Serializable { - private ArrayList uploadTasks; + private ArrayList uploadTasks; public State getState(int position) { if (uploadTasks.size() > position) { @@ -15,12 +16,12 @@ public State getState(int position) { } } - public MultiUploadTask(ArrayList uploadTasks) { + public MultiUploadTask(ArrayList uploadTasks) { this.uploadTasks = uploadTasks; } - public ArrayList getUploadTasks() { + public ArrayList getUploadTasks() { return uploadTasks; } @@ -34,15 +35,14 @@ public int getProgress() { currentSize += uploadTasks.get(i).getCurrentSize(); } if (totalSize != 0L) { - float progress = (float) currentSize / (float) totalSize; - return (int) (progress * 100); + float progress = ( float ) currentSize / ( float ) totalSize; + return ( int ) (progress * 100); } else { return 0; } } - public int getProgress(int position) { if (uploadTasks.size() > position) { return this.getUploadTasks().get(position).getProgress(); @@ -51,6 +51,32 @@ public int getProgress(int position) { } } + public float getAverageSpeed() { + long currentSize = 0L; + for (int i = 0; i < uploadTasks.size(); i++) { + currentSize += uploadTasks.get(i).getCurrentSize(); + } + + return getAverageSpeed(currentSize); + + } + + public String getAverageSpeedFormat() { + long currentSize = 0L; + for (int i = 0; i < uploadTasks.size(); i++) { + currentSize += uploadTasks.get(i).getCurrentSize(); + } + return getAverageSpeedFormat(currentSize); + } + + public String getAverageSpeedFormat(TimeUnit timeUnit) { + long currentSize = 0L; + for (int i = 0; i < uploadTasks.size(); i++) { + currentSize += uploadTasks.get(i).getCurrentSize(); + } + return getAverageSpeedFormat(currentSize, timeUnit); + } + @Override public String toString() { diff --git a/RxHttp/src/main/java/com/github/eajon/task/UploadTask.java b/RxHttp/src/main/java/com/github/eajon/task/UploadTask.java index 92a10ab..f1f10bf 100644 --- a/RxHttp/src/main/java/com/github/eajon/task/UploadTask.java +++ b/RxHttp/src/main/java/com/github/eajon/task/UploadTask.java @@ -2,6 +2,7 @@ import java.io.File; import java.io.Serializable; +import java.util.concurrent.TimeUnit; public class UploadTask extends BaseTask implements Serializable { @@ -72,6 +73,18 @@ public int getProgress() { } } + public float getAverageSpeed() { + return getAverageSpeed(currentSize); + } + + public String getAverageSpeedFormat() { + return getAverageSpeedFormat(currentSize); + } + + public String getAverageSpeedFormat(TimeUnit timeUnit) { + return getAverageSpeedFormat(currentSize, timeUnit); + } + @Override public String toString() { diff --git a/RxHttp/src/main/java/com/github/eajon/upload/UploadRequestBody.java b/RxHttp/src/main/java/com/github/eajon/upload/UploadRequestBody.java index 3453bf8..f5efe6e 100644 --- a/RxHttp/src/main/java/com/github/eajon/upload/UploadRequestBody.java +++ b/RxHttp/src/main/java/com/github/eajon/upload/UploadRequestBody.java @@ -3,6 +3,7 @@ import com.github.eajon.task.MultiUploadTask; import com.github.eajon.task.UploadTask; +import com.github.eajon.util.RxBusUtils; import java.io.IOException; @@ -132,9 +133,9 @@ public void write(Buffer source, long byteCount) throws IOException { uploadTask.setState(UploadTask.State.LOADING); } if (multiUploadTask != null) { - multiUploadTask.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, multiUploadTask, isStick); } else { - uploadTask.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, uploadTask, isStick); } } }; diff --git a/RxHttp/src/main/java/com/github/eajon/util/GsonUtils.java b/RxHttp/src/main/java/com/github/eajon/util/GsonUtils.java index d9021c0..c605c16 100644 --- a/RxHttp/src/main/java/com/github/eajon/util/GsonUtils.java +++ b/RxHttp/src/main/java/com/github/eajon/util/GsonUtils.java @@ -48,7 +48,7 @@ public Map deserialize(JsonElement json, Type typeOfT, JsonDeser JsonObject jsonObject = json.getAsJsonObject(); Set> entrySet = jsonObject.entrySet(); for (Map.Entry entry : entrySet) { - Field field = getDeclaredField(object, entry.getKey()); + Field field = ReflectUtils.getDeclaredField(object, entry.getKey()); boolean hasName = field.isAnnotationPresent(Name.class); if (hasName) { Name name = field.getAnnotation(Name.class); @@ -64,23 +64,7 @@ public Map deserialize(JsonElement json, Type typeOfT, JsonDeser } } - public static Field getDeclaredField(Object object, String fieldName) { - Field field = null; - Class clazz = object.getClass(); - - for (; clazz != Object.class; clazz = clazz.getSuperclass()) { - try { - field = clazz.getDeclaredField(fieldName); - return field; - } catch (NoSuchFieldException e) { - //这里甚么都不能抛出去。 - //如果这里的异常打印或者往外抛,则就不会进入 - } - } - - return field; - } } diff --git a/RxHttp/src/main/java/com/github/eajon/util/ReflectUtils.java b/RxHttp/src/main/java/com/github/eajon/util/ReflectUtils.java new file mode 100644 index 0000000..bd1c27f --- /dev/null +++ b/RxHttp/src/main/java/com/github/eajon/util/ReflectUtils.java @@ -0,0 +1,38 @@ +package com.github.eajon.util; + +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +public class ReflectUtils { + + public static Field getDeclaredField(Object object, String fieldName) { + Field field = null; + Class clazz = object.getClass(); + for (; clazz != Object.class; clazz = clazz.getSuperclass()) { + try { + assert clazz != null; + field = clazz.getDeclaredField(fieldName); + return field; + } catch (NoSuchFieldException e) { + //这里甚么都不能抛出去。 + //如果这里的异常打印或者往外抛,则就不会进入 + } + } + return field; + } + + + //获取泛型类的type + public static Type getParameterizedType(Object object) { + Class clazz = object.getClass(); + Type type = clazz.getGenericSuperclass(); + if (type instanceof ParameterizedType) { + ParameterizedType p = ( ParameterizedType ) type; + return p.getActualTypeArguments()[0]; + } else { + return null; + } + } + +} diff --git a/RxHttp/src/main/java/com/github/eajon/util/RxBusUtils.java b/RxHttp/src/main/java/com/github/eajon/util/RxBusUtils.java index 740a4b2..52186f7 100644 --- a/RxHttp/src/main/java/com/github/eajon/util/RxBusUtils.java +++ b/RxHttp/src/main/java/com/github/eajon/util/RxBusUtils.java @@ -8,20 +8,14 @@ public class RxBusUtils { //默认发射粘性消息只同类型保留最后一个 - public static void sendBus(String tag, boolean isStick, Object object) { + public static void sendBus(String tag, Object object, boolean isStick) { if (isStick) { RxBus.getDefault().removeStickyEventType(object.getClass()); - if (TextUtils.isEmpty(tag)) { - RxBus.getDefault().postSticky(object); - } else { - RxBus.getDefault().postSticky(tag, object); - } + } + if (TextUtils.isEmpty(tag)) { + RxBus.getDefault().post(object, isStick); } else { - if (TextUtils.isEmpty(tag)) { - RxBus.getDefault().post(object); - } else { - RxBus.getDefault().post(tag, object); - } + RxBus.getDefault().post(tag, object, isStick); } } } diff --git a/RxHttp/src/main/java/com/github/eajon/util/RxUtils.java b/RxHttp/src/main/java/com/github/eajon/util/RxUtils.java index 5bfd737..28ef298 100644 --- a/RxHttp/src/main/java/com/github/eajon/util/RxUtils.java +++ b/RxHttp/src/main/java/com/github/eajon/util/RxUtils.java @@ -136,7 +136,12 @@ public void accept(Disposable disposable) throws Exception { // LoggerUtils.e("dialog", "doOnSubscribe"); if (task != null) { task.setState(BaseTask.State.LOADING); - task.sendBus(tag, isStick); + if (task instanceof MultiUploadTask) { + for (UploadTask uploadTask : (( MultiUploadTask ) task).getUploadTasks()) { + uploadTask.setState(UploadTask.State.WAITING); + } + } + RxBusUtils.sendBus(tag, task, isStick); } } }).doOnError(new Consumer() { @@ -150,7 +155,7 @@ public void accept(Throwable throwable) throws Exception { uploadTask.setState(UploadTask.State.ERROR); } } - task.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, task, isStick); } } }).doOnNext(new Consumer() { @@ -159,7 +164,7 @@ public void accept(Object o) throws Exception { // LoggerUtils.e("dialog", "doOnNext"); if (task != null) { task.setState(BaseTask.State.FINISH); - task.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, task, isStick); } } }).doFinally(new Action() { @@ -177,7 +182,7 @@ public void run() throws Exception { uploadTask.setState(UploadTask.State.CANCEL); } } - task.sendBus(tag, isStick); + RxBusUtils.sendBus(tag, task, isStick); } } }); diff --git a/app/src/main/java/com/eajon/my/MainActivity.java b/app/src/main/java/com/eajon/my/MainActivity.java index dc16396..c79bc7c 100644 --- a/app/src/main/java/com/eajon/my/MainActivity.java +++ b/app/src/main/java/com/eajon/my/MainActivity.java @@ -5,7 +5,6 @@ import android.arch.lifecycle.ViewModelProviders; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; import android.util.Log; import android.view.View; import android.widget.Button; @@ -18,7 +17,6 @@ import com.eajon.my.model.Weather; import com.eajon.my.util.PhotoUtils; import com.eajon.my.util.ZhihuImagePicker; -import com.eajon.my.viewModel.WeatherModule; import com.eajon.my.viewModel.WeatherModule2; import com.eajon.my.widget.CProgressDialog; import com.github.eajon.RxHttp; @@ -91,13 +89,13 @@ protected int setContentId() { @Override protected void initView() { // 官方MVVM - WeatherModule weatherModule = ViewModelProviders.of(this).get(WeatherModule.class); - weatherModule.getWeather().observe(this, new android.arch.lifecycle.Observer() { - @Override - public void onChanged(@Nullable Weather weather) { - content.setText(new Gson().toJson(weather)); - } - }); +// WeatherModule weatherModule = ViewModelProviders.of(this).get(WeatherModule.class); +// weatherModule.getWeather().observe(this, new android.arch.lifecycle.Observer() { +// @Override +// public void onChanged(@Nullable Weather weather) { +// content.setText(new Gson().toJson(weather)); +// } +// }); // RxHttp MVVM WeatherModule2 weatherModule2 = ViewModelProviders.of(this).get(WeatherModule2.class); weatherModule2.getWeather(); @@ -120,7 +118,8 @@ protected void initData(Bundle savedInstanceState) { @Override protected void initLogic() { - doRequest(); +// doRequest(); + doRequest2(); } private void doRequest() { @@ -147,6 +146,32 @@ public void onError(ApiException t) { }); } + private void doRequest2() { + HashMap map = new HashMap(); + map.put("username", "admin"); + map.put("password", "12345678"); + new RxHttp.Builder() + .post() + .apiUrl("user/login") + .addParameter(map) + .entity(CommonResponse.class) + .build() + .request(new HttpObserver() { + @Override + public void onSuccess(CommonResponse o) { + HashMap header = new HashMap<>(); + header.put("Authorization", o.getData()); + RxHttp.getConfig().baseHeader(header); + content.setText(o.getData().toString()); + } + + @Override + public void onError(ApiException t) { + + } + }); + } + private void doJsonRequest() { BaseResponse baseResponse=new BaseResponse(); baseResponse.setCode(1); @@ -178,6 +203,7 @@ private void doProfile() { .get() .apiUrl("api/user/profile") .entity(type) + .cacheKey("profile") .build() .request(new HttpObserver>() { @Override @@ -204,6 +230,18 @@ public void run() { } + + @RxSubscribe(observeOnThread = EventThread.MAIN, isSticky = true, tag = "weather") + public void weatherCallBack(String weather) { + runOnUiThread(new Runnable() { + @Override + public void run() { + content.setText(weather); + } + }); + + } + @RxSubscribe(observeOnThread = EventThread.MAIN, isSticky = true, tag = "weather")//异常捕获 public void weatherCallBack(ApiException e) { content.setText(new Gson().toJson(e)); @@ -214,7 +252,7 @@ public void weatherCallBack(ApiException e) { @SuppressWarnings("unused") public void downloadProgress(DownloadTask downloadTask) { LoggerUtils.info("download1", downloadTask.getState().toString() + downloadTask.getProgress() + "%" + downloadTask.getSpeedFormat()); - download.setText(downloadTask.getState().toString() + downloadTask.getProgress() + "%" + downloadTask.getSpeedFormat()); + download.setText(downloadTask.getState().toString() + downloadTask.getProgress() + "%" + downloadTask.getSpeedFormat() + "平均速度:" + downloadTask.getAverageSpeedFormat() + "用时:" + downloadTask.getDuration() + "速度:" + downloadTask.getAverageSpeed()); } @@ -228,11 +266,11 @@ public void uploadProgress(UploadTask uploadTask) { @RxSubscribe(observeOnThread = EventThread.MAIN, tag = "upload") @SuppressWarnings("unused") public void uploadProgress(MultiUploadTask multiUploadTask) { - content.setText("总进度:" + multiUploadTask.getProgress() + "%" + multiUploadTask.getState().toString() + multiUploadTask.getSpeedFormat()); + content.setText("总进度:" + multiUploadTask.getProgress() + "%" + multiUploadTask.getState().toString() + multiUploadTask.getSpeedFormat() + "平均速度:" + multiUploadTask.getAverageSpeedFormat() + "用时:" + multiUploadTask.getDuration()); if (multiUploadTask.getUploadTasks().size() >= 3) {//假设选择3个 - content1.setText("第一个:" + multiUploadTask.getProgress(0) + "%" + multiUploadTask.getState(0).toString() + multiUploadTask.getSpeedFormat()); - content2.setText("第二个:" + multiUploadTask.getProgress(1) + "%" + multiUploadTask.getState(1).toString() + multiUploadTask.getSpeedFormat()); - content3.setText("第三个:" + multiUploadTask.getProgress(2) + "%" + multiUploadTask.getState(2).toString() + multiUploadTask.getSpeedFormat()); + content1.setText("第一个:" + multiUploadTask.getProgress(0) + "%" + multiUploadTask.getState(0).toString() + multiUploadTask.getUploadTasks().get(0).getSpeedFormat()); + content2.setText("第二个:" + multiUploadTask.getProgress(1) + "%" + multiUploadTask.getState(1).toString() + multiUploadTask.getUploadTasks().get(1).getSpeedFormat()); + content3.setText("第三个:" + multiUploadTask.getProgress(2) + "%" + multiUploadTask.getState(2).toString() + multiUploadTask.getUploadTasks().get(2).getSpeedFormat()); } } @@ -255,7 +293,6 @@ private void upload(ArrayList uploadTasks) { new RxHttp.Builder() .apiUrl("image/upload") .task(multiUploadTask) - .isStick(true) .tag("upload") .addParameter(params) .lifecycle(MainActivity.this) diff --git a/app/src/main/java/com/eajon/my/SecondActivity.java b/app/src/main/java/com/eajon/my/SecondActivity.java index 468108e..7cbbc48 100644 --- a/app/src/main/java/com/eajon/my/SecondActivity.java +++ b/app/src/main/java/com/eajon/my/SecondActivity.java @@ -91,4 +91,14 @@ public void run() { } }); } + + @RxSubscribe(observeOnThread = EventThread.MAIN, isSticky = true, tag = "weather") + public void weatherCallBack(String weather) { + runOnUiThread(new Runnable() { + @Override + public void run() { + content2.setText("请求返回" + weather); + } + }); + } } diff --git a/app/src/main/java/com/eajon/my/viewModel/WeatherModule2.java b/app/src/main/java/com/eajon/my/viewModel/WeatherModule2.java index b217aa8..1591d1d 100644 --- a/app/src/main/java/com/eajon/my/viewModel/WeatherModule2.java +++ b/app/src/main/java/com/eajon/my/viewModel/WeatherModule2.java @@ -39,6 +39,7 @@ public void getWeather() { .addObjectParameter(testGson)//可以使用name注解 过滤不需要的参数 // .addParameter(map) .entity(Weather.class) + .isStick(true) .tag("weather") .build() .request();