无法将值放入数组列表中

问题描述 投票:0回答:1

我试图在movies类的BlogRepository ArrayList中设置值。但我最终找不到结果。

我想修改示例,以便ArrayList内的存储是电影。因此该示例有效,结果显示出该示例有效。

json数据:

[
      {
        "albumId": 1,
        "id": 1,
        "title": "accusamus beatae ad facilis cum similique qui sunt",
        "url": "https://via.placeholder.com/600/92c952",
        "thumbnailUrl": "https://via.placeholder.com/150/92c952"
      },
      {
        "albumId": 1,
        "id": 2,
        "title": "reprehenderit est deserunt velit ipsam",
        "url": "https://via.placeholder.com/600/771796",
        "thumbnailUrl": "https://via.placeholder.com/150/771796"
      },
      {
        "albumId": 1,
        "id": 3,
        "title": "officia porro iure quia iusto qui ipsa ut modi",
        "url": "https://via.placeholder.com/600/24f355",
        "thumbnailUrl": "https://via.placeholder.com/150/24f355"
      }
]

代码:

    // 
    public class BlogRepository {

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

        private MutableLiveData<List<Blog2>> mutableLiveData = new MutableLiveData<>();

        private Application application;

        public BlogRepository(Application application){

            this.application = application;
        }

        public MutableLiveData<List<Blog2>> getMutableLiveData() {
            RestApiService service = RetrofitInstance.getApiService();
            Call<List<BlogWrapper>> call = service.getPopularBlog();
            call.enqueue(new Callback<List<BlogWrapper>>(){
                @Override
                public void onResponse(Call<List<BlogWrapper>> call, Response<List<BlogWrapper>> response) {
                    List<BlogWrapper> mBlogWrapper = response.body();
                    for (int i=0; i<mBlogWrapper.size(); i++) {
                       movies = (ArrayList<Blog2>) mBlogWrapper.get(i).getBlog();
                        //Log.d("trace_movies : ",""+ movies);
                    }
                }
                @Override
                public void onFailure(Call<List<BlogWrapper>> call, Throwable t) {
                  //  Toast.makeText(MainActivity.this, "Unable to load users", Toast.LENGTH_SHORT).show();
                    Log.e("trace_2",""+t.getMessage().toString());
                }
            });
            return mutableLiveData;
        }

    }

    // 

    public class Blog2 {

        @SerializedName("albumId")
        private int albumId;
        @SerializedName("id")
        private int id;
        @SerializedName("title")
        private String title;
        @SerializedName("url")
        private String url;
        @SerializedName("thumbnailUrl")
        private String thumbnailUrl;


        public void setAlbumId(int albumId) {
            this.albumId = albumId;
        }

        public void setId(int id) {
            this.id = id;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public void setThumbnailUrl(String thumbnailUrl) {
            this.thumbnailUrl = thumbnailUrl;
        }


        public int getAlbumId() {
            return albumId;
        }

        public int getId() {
            return id;
        }

        public String getTitle() {
            return title;
        }

        public String getUrl() {
            return url;
        }

        public String getThumbnailUrl() {
            return thumbnailUrl;
        }
    }

    /// 

    public class BlogWrapper {

        @SerializedName("data")
        private List<Blog2> mData;
        @SerializedName("error")
        private Boolean mError;
        @SerializedName("message")
        private String mMessage;
        @SerializedName("status")
        private String mStatus;

        public List<Blog2>getBlog() {
            return mData;
        }

        public void setBlog(List<Blog2> data) {
            mData = data;
        }

        public Boolean getError() {
            return mError;
        }

        public void setError(Boolean error) {
            mError = error;
        }

        public String getMessage() {
            return mMessage;
        }

        public void setMessage(String message) {
            mMessage = message;
        }

        public String getStatus() {
            return mStatus;
        }

        public void setStatus(String status) {
            mStatus = status;
        }

    }

    /// 

    public interface RestApiService {

      @GET("/photos")
      public Call<List<BlogWrapper>> getPopularBlog();

    }

    // 

    public class RetrofitInstance {

        private static Retrofit retrofit = null;
        public static final String BASE_URL_ = "https://jsonplaceholder.typicode.com/albums/1/";
         // public static final String BASE_URL_ = "https://androidwave.com/api/";
         public static RestApiService getApiService() {
             Gson gson = new GsonBuilder().setLenient().create();
            if (retrofit == null) {
                retrofit = new retrofit2.Retrofit
                 .Builder()
                   .baseUrl(BASE_URL_)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                      .build();

            }
            return retrofit.create(RestApiService.class);
        }
    }
java android android-livedata android-json
1个回答
0
投票

尝试此代码,对不起,我没有笔记本电脑了……我可以从中了解。我只是将响应对象夹为List<Blog2>,因为您需要它

call.enqueue(new Callback<List<Blog2>>(){
                @Override
                public void onResponse(Call<List<Blog2>> call, Response<List<Blog2>> response) {
                    List<Blog2> mBlogWrapper = response.body();
                    for (int i=0; i<mBlogWrapper.size(); i++) {
                       movies.add(mBlogWrapper.get(i));
                        //Log.d("trace_movies : ",""+ movies);
                    }
                }
            });

现在您有了列表中的值,然后可以将其值存储到MutableLivedata。

也不要忘记更改您的翻新方法

public interface RestApiService {

  @GET("/photos")
  public Call<List<Blog2>> getPopularBlog();

}
© www.soinside.com 2019 - 2024. All rights reserved.