gpt4 book ai didi

java - 如何将Retrofit onResponse方法返回的Json数据发送到其他类?

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:06 25 4
gpt4 key购买 nike

我想重构代码以实现简单性和可读性,这就是为什么我想将代码移到类之外并在调用方法时将结果返回到类。

尝试:

 ArrayList<MovieReview> movieReview;

public ArrayList<MovieReview> getReviews(String id) {
if (NetworkUtil.isNetworkConnected(getActivity())) {

ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);

Call<MovieReviewResponse> call = null;

call = apiService.getMovieReviews(id, BuildConfig.THE_MOVIE_DB_API_KEY);

call.enqueue(new Callback<MovieReviewResponse>() {
@Override
public void onResponse(Call<MovieReviewResponse> call, Response<MovieReviewResponse> response) {
movieReview= (ArrayList<MovieReview>) response.body().getMovieReviews();
}

@Override
public void onFailure(Call<MovieReviewResponse> call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});

}
return movieReview;
}

输出:如果我在 on 响应之外使用数组列表,则会给出 null 值。

但是如果我从响应中调用一个方法并将结果 movieReview 作为参数传递,它就可以正常工作。

以前使用过:

 public void getReviews(String id) {
if (NetworkUtil.isNetworkConnected(getActivity())) {

ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);

Call<MovieReviewResponse> call = null;

call = apiService.getMovieReviews(id, BuildConfig.THE_MOVIE_DB_API_KEY);

call.enqueue(new Callback<MovieReviewResponse>() {
@Override
public void onResponse(Call<MovieReviewResponse> call, Response<MovieReviewResponse> response) {
movieReview = (ArrayList<MovieReview>) response.body().getMovieReviews();
setData(movieReview);
}

@Override
public void onFailure(Call<MovieReviewResponse> call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});

}

}`

最佳答案

Output: if I used array list outside the on response gives null value

因为这就是异步方法的工作原理。您的 return 发生在 onResponse 发生之前,因此列表对象为 null。

提示:在理想情况下,您希望始终返回一个空列表,而不是null

<小时/>

重命名您的方法。

public ArrayList<MovieReview> getReviews(String id)

改为

public ArrayList<MovieReview> getReviews(String id, Callback<MovieReviewResponse> callback)
<小时/>

替换此代码

call.enqueue(new Callback<MovieReviewResponse>() {
...
});

有了这个

call.enqueue(callback);
<小时/>

无论你在哪里调用该方法

// In Activity
String id = "X";
api.getReviews(id);

现在做......

// In Activity
String id = "X";
api.getReviews(id, new Callback<MovieReviewResponse>() {
...
});

现在,您可以在内部 onResponse 中更新 ListView 适配器,或执行任何您需要执行的操作

关于java - 如何将Retrofit onResponse方法返回的Json数据发送到其他类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com