android - 改造冻结用户界面
问题描述
我正在使用 AsyncTask 将我的位图转换为 base64 字符串。之后,在 asyncTask 的后期执行中,我尝试使用改造将该 base64 字符串上传到服务器中。
但是当我提出改造请求时,我的应用程序会冻结。
这是我的代码:
public class ConvertBitmapToString extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String base64String = FrequentFunctions.convertBitmapToBase64(singleBitmapDetail.getBitMap());
return base64String;
}
@Override
protected void onPostExecute(final String result) {
hideProgressBar();
hitInsertImageApi(result);
}
@Override
protected void onPreExecute() {
baseShowProgressBar();
}
}
这是我的改造请求代码:
Call<InsertImageResponse> callback = api.insertUpdateImage(userId, imageid, imageData);
callback.enqueue(new Callback<InsertImageResponse>() {
@Override
public void onResponse(Call<InsertImageResponse> call, Response<InsertImageResponse> response) {
if (response.body().getReturnMessage().equalsIgnoreCase("success")) {
handler.onSuccess(response.body());
} else {
handler.onError("Something went wrong");
}
}
@Override
public void onFailure(Call<InsertImageResponse> call, Throwable t) {
handler.onError(t.getMessage());
}
});
请帮帮我
解决方案
在我的情况下,Retrofit 的创建/初始化是在使用 Moshi 等适配器时特别阻塞 UI 线程的一种。其他人也在他们的回购中报告了这个问题。
推荐阅读
- opencv - 如何针对图像相似度优化 OpenCV 直方图比较?
- javascript - 可以使用函数来检查 do...while 中的条件是真还是假?
- javascript - 减少许多元素的 mouseenter/mouseleave 函数的重复性
- cakephp - CakePHP 项目从本地主机重定向到实时网站
- android - 当两个 EditText 字段至少有一个字符输入时启用按钮 (Android)
- repository - 如何将 Fossil 本地存储库推送到远程托管
- coldfusion - 用唯一命名的输入字段替换占位符值
- asp.net - 在 ASP.NET Core SPA 应用程序中配置公共路由
- javascript - 使用 sortBy redux 操作对 redux 存储数组进行排序不会向组件发送新道具
- groovy - 使用拆卸脚本在准备好的 api 中重新运行测试用例