我正在编写一个应用程序,使用回调函数从我的在线数据库中获取数据到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
没有返回任何东西,尽管回调按日志成功运行。我非常感谢你的帮助。
我想我同意你之前的评论,你的函数将总是返回一个空列表。异步调用不起作用。没有回报价值。
不要在ListingModel中进行API调用。首先获取数据。然后将其传递给ListingModel。您可以使用update()方法接收获取的项目列表,并强制刷新ListingModel。
在ItemAdapter上创建一个方法来设置列表并通过调用notifyDataSetChanged()通知适配器刷新;如果获取的列表不为空,则在成功响应中调用该方法。即itemAdapter.setList(myArrayList)。