java - 如何通过改造从列表函数中调用 return 的 url

标签 java android list android-studio retrofit

我尝试从通过改造获得的网址返回列表。它有效,我得到了数据,但它不会返回。

这是我的代码

public List<MovieResponse> loadCourses() {
    ArrayList<MovieResponse> list = new ArrayList<>();

    ApiServices apiService =
            NetworkClient.getRetrofitClient().create(ApiServices.class);

    Call<MovieResult> call = apiService.getMovies();
    call.enqueue(new Callback<MovieResult>() {
        @Override
        public void onResponse(Call<MovieResult> call, Response<MovieResult> response) {
            if (response.body() != null) {
                ArrayList<MovieResponse> movies = new ArrayList<>();
                movies = response.body().getResults();
                Log.d("",""+movies);
                list.addAll(movies);
                Log.d("",""+list);
            }
        }

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

当我打印 onResponse 内的列表时它有效并且有数据。但是当我返回它或尝试在 onResponse 之外打印列表时例如下面ArrayList<MovieResponse> list = new ArrayList<>();它不显示数据。

请帮忙看看到底出了什么问题。我真的很感激。

最佳答案

最简单的方法是定义您的 movies直接在 Activity 或 Fragment 内部列出(换句话说,类的字段成员)。

从异步方法返回数据不是一个好主意。 更改 loadCourses 的返回类型方法void并实例化提交的 movies里面onResponse() .

public class SomeActivity extends AppCompatActivity {

   private ArrayList<MovieResponse> movies = new ArrayList<>();

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_some);
   }

   public void loadCourses() {
       ApiServices apiService =
               NetworkClient.getRetrofitClient().create(ApiServices.class);

       Call<MovieResult> call = apiService.getMovies();
       call.enqueue(new Callback<MovieResult>() {
           @Override
           public void onResponse(Call<MovieResult> call, Response<MovieResult> response) {
            if (response.body() != null) {
                movies = response.body().getResults();
                ...
            }
        }

        @Override
        public void onFailure(Call<MovieResult> call, Throwable t) {
            ...
        }
    });
}

}

关于java - 如何通过改造从列表函数中调用 return 的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59534588/

相关文章:

java - 尝试使用 WebDriver 从表中检索值,但输出显示相同的值两次

linux - java.lang.NoClassDefFoundError : com/tinkerpop/blueprints/impls/orient/OrientGraphFactory 错误

java - 添加/删除项目时的 Richfaces pickList ajax 事件

android - 我将如何画一条线来连接 flutter 中的点

android - 如何确保在 Android Volley 的 API 请求中使用 TLS 1.2?

Java - 如何根据 JList 1 中的选择选择 JList 2 中的项目?

java - 您如何断言在 JUnit 测试中引发了某个异常?

android - Firebase Database Android - 来自多个 ValueEventListeners 的快照检索顺序

python - 如何从多个句子中返回列表中的关键字?

java - 基于闭包比较两个无序列表的对象