从内部类中添加对象到arraylist

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

我正在编写一个应用程序,使用回调函数从我的在线数据库中获取数据到RecyclerView中的fragment。正如您将在下面的代码中看到的那样,我试图显示负责我最终结果的所有相关代码片段。如果您需要更多信息,请询问我是否可以提供。

这是一个名为Question.java的类

public class Question {
    public Integer postid;
    public String title;
    public String content;
    public String tags;
    public String created;

}

然后是回调类:CallbackQuestions.java

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.example.myapp;

public class CallbackQuestions implements Serializable{
    public int total = -1;
    public List<Question> data = new ArrayList<>();
}

我的ItemModel类:ItemModel.java

public class ItemModel {
    private String Title;
    private String Description;
    private String Tags;
    private String Created;

    public ItemModel(String Title, String Description, String Tags, String Created) {
        this.Title = Title;
        this.Description = Description;
        this.Tags = Tags;
        this.Created = Created;
    }

    public String getCreated() {
        return Created;
    }

    public void setCreated(String Created) {
        this.Created = Created;
    }

    public String getTitle() {
        return Title;
    }

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

    public String getDescription() {
        return Description;
    }

    public void setDescription(String Description) {
        this.Description = Description;
    }

    public String getTags() {
        return Tags;
    }

    public void setTags(String Tags) {
        this.Tags = Tags;
    }
}

然后最后这里让我很头疼让它工作的是ListingModel.java

@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        ListingModel listingModel = mArrayList.get(position);

        ((NormalViewHolder) holder).tv_card_header.setText(mArrayList.get(position).getHeader());

        ((NormalViewHolder) holder).listing_recycler_view.setHasFixedSize(true);
        RecyclerView.LayoutManager normalLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        ((NormalViewHolder) holder).listing_recycler_view.setLayoutManager(normalLayoutManager);

        ArrayList<ItemModel> list = loadQuestionsList();

        ItemAdapter itemAdapter = new ItemAdapter(list);
        ((NormalViewHolder) holder).listing_recycler_view.setAdapter(itemAdapter);

        Log.d("MyAdapter", "position: " + position);
    }

    public ArrayList<ItemModel> loadQuestionsList() {
        final ArrayList<ItemModel> mArrayList = new ArrayList<>();
        int start = 0;
        String sort = "recent";
        API api = CallJson.callJson();
        Call<CallbackPosts> callbackQuestionsCall = api.QuestionsAll(BaseUrlConfig.RequestLoadMore, start, sort);
        callbackQuestionsCall.enqueue(new Callback<CallbackQuestions>() {
            @Override
            public void onResponse(Call<CallbackQuestions> call, Response<CallbackQuestions> response) {
                CallbackQuestions callbackQuestions = response.body();
                for (QuestionsAll thisQuestion : callbackQuestions.data){
                    mArrayList.add(new ItemModel(thisQuestion.Title, thisQuestion.Description, thisQuestion.Tags, thisQuestion.Created));
                }
                 myArrayList = mArrayList;
            }

            @Override
            public void onFailure(Call<CallbackQuestions> call, Throwable t) {
                if (!call.isCanceled());
            }
        });
        return myArrayList;
    }

问题是我的ArrayLists没有返回任何东西,尽管回调按日志成功运行。我非常感谢你的帮助。

java android arraylist callback
1个回答
0
投票

我想我同意你之前的评论,你的函数将总是返回一个空列表。异步调用不起作用。没有回报价值。

不要在ListingModel中进行API调用。首先获取数据。然后将其传递给ListingModel。您可以使用update()方法接收获取的项目列表,并强制刷新ListingModel。

在ItemAdapter上创建一个方法来设置列表并通过调用notifyDataSetChanged()通知适配器刷新;如果获取的列表不为空,则在成功响应中调用该方法。即itemAdapter.setList(myArrayList)。

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