从onResponse回调中获取数据并以相同的方法返回
问题描述:
这是我的代码。从onResponse回调中获取数据并以相同的方法返回
private long getLastTimestamp()
{
long timestamp = 0;
retrofit2.Call<UserStatistic> call = api.getUserStatistics();
call.enqueue(new Callback<UserStatistic>() {
@Override
public void onResponse(retrofit2.Call<UserStatistic> call, Response<UserStatistic> response) {
if (response.body() != null)
{
List<Statistic> statistics = response.body().getData();
statistics.get(statistics.size() - 1).Data;
}
}
@Override
public void onFailure(retrofit2.Call<UserStatistic> call, Throwable t) {
Log.d("LOG", "Something went wrong :c");
}
});
return timestamp;
}
我真的不知道如何简单地返回保存在时间戳变量中的响应。有任何想法吗?提前致谢。
答
如果要同步调用此方法,可以使用以下代码
private long getLastTimestamp() {
retrofit2.Call<UserStatistic> call = api.getUserStatistics();
UserStatistic statistics = call.execute().body();
long timestamp = statistics.YOUR_CODE;
return timestamp;
}
,或者如果你想使异步调用,然后调用此方法像这样
private void callingMethod() {
getLastTimestamp (new Callback<UserStatistic>() {
@Override
public void onResponse(retrofit2.Call<UserStatistic> call, Response<UserStatistic> response) {
if (response.body() != null)
{
List<Statistic> statistics = response.body().getData();
statistics.get(statistics.size() - 1).Data;
}
}
@Override
public void onFailure(retrofit2.Call<UserStatistic> call, Throwable t) {
Log.d("LOG", "Something went wrong :c");
}
});
}
private long getLastTimestamp(Callback<UserStatistic> callback)
{
long timestamp = 0;
retrofit2.Call<UserStatistic> call = api.getUserStatistics();
call.enqueue(callback);
return timestamp;
}
答
这是因为
retrofit2.Call<UserStatistic> call = api.getUserStatistics();
此线
call.enqueue(new Callback<UserStatistic>() {
将创建一个监听器和当数据网络呼叫之后负载此侦听改型的helop内将调用onResponse()方法
+0
是的,但我需要返回response.body()。getData();从主要方法,但我不能从我的回调回应。 –
答
通过调用call.enqueue(...)
方法的网络操作都在一个单独的线程来执行。
如果你想在你的方法中返回结果,你必须使用call.execute()
方法来同步执行网络操作。
但要小心,因为你不能在UI线程上执行网络操作(https://developer.android.com/training/basics/network-ops/connecting.html)。
希望有帮助!
这就是我需要的!谢谢! –