【发布时间】:2020-10-11 18:24:18
【问题描述】:
我看到了一些类似的问题,但它们似乎并没有准确地回答我的问题。我有一个应该返回字符串的方法。我正在使用改造,但在响应中,我无法返回字符串?下面是代码。
public String getInformation(String information, String username) {
String result;
Call<DefaultResponse> call = RetrofitClient.getInstance().getApi().getInformation(information,username);
call.enqueue(new Callback<DefaultResponse>() {
@Override
public void onResponse(Call<DefaultResponse> call, Response<DefaultResponse> response) {
result = response.body().getMsg();
}
@Override
public void onFailure(Call<DefaultResponse> call, Throwable t) {
}
});
return result;
}
【问题讨论】:
-
“我有一个应该返回字符串的方法”——如果该方法将在后台线程上调用,请尝试使用
call.execute()而不是call.enqueue()。如果将在主应用程序线程上调用该方法,则不应将其设置为返回字符串,因为在主应用程序线程上进行网络 I/O 是个坏主意。 -
谢谢,我试过 call.execute() 并抛出错误 android.os.NetworkOnMainThreadException
-
那是因为您的方法正在主应用程序线程上被调用。您需要调整此方法以不返回字符串。相反,让它接受某种可以从
onResponse()调用的回调。这样,enqueue()将为您处理后台线程,因此您的网络 I/O 不会冻结 UI。见y.allam's answer。
标签: android mysql get retrofit retrofit2