我正在使用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());
}
});
请帮帮我
答案 0 :(得分:0)
您仍在后执行中调用改造...当您与ui元素进行交互时,此操作位于主线程上。通过调用Retrofit,它将阻塞线程,直到发送base64字符串为止。
答案 1 :(得分:0)
默认情况下,Retrofit在后台运行,并使用回调将结果发送到主线程。查看事件探查器,然后您可以了解哪一方正在占用设备的更多内存。
答案 2 :(得分:0)
在我的情况下,<ul>
<li ng-repeat="x in combinedJson | orderBy:sortprice">
<div class="product flex-container row">
<div>{{x.price}}</div>
</div>
</li>
</ul>
在someString.equalsIgnoreCase(otherString)
为空时停止了剩余的代码执行(无错误);
答案 3 :(得分:-1)
在我的情况下,Retrofit 的创建/初始化是一种阻塞 UI 线程的方法,特别是当您使用像 Moshi 这样的适配器时。其他人也在他们的存储库中报告了这个 problem。