gpt4 book ai didi

java - Android:在RecyclerView中显示AsyncTask的数据

转载 作者:行者123 更新时间:2023-11-29 19:23:29 25 4
gpt4 key购买 nike

我又来了:/我尝试设置一个 AsyncTask。这是我的代码,我在其中设置 AsyncTask 的 fragment Activity :

public class HomeFragment extends Fragment {

// RecyclerView
RecyclerView recyclerView;
RecyclerView.Adapter rvAdapter;
RecyclerView.LayoutManager rvLayoutManger;
List<NewsData> news_list;



@Nullable
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.activity_home, null);

// RecyclerView Setup
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view1);
rvLayoutManger = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(rvLayoutManger);
rvAdapter = new HomeRecyclerAdapter(getActivity(), news_list);
recyclerView.setAdapter(rvAdapter);
news_list = new ArrayList<>();

load_data_from_server(0);

return view;
}

private void load_data_from_server(int id) {
AsyncTask<Integer, Void, Void> task = new AsyncTask<Integer, Void, Void>() {
@Override
protected Void doInBackground(Integer... integers) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://here is my url ").build();
try {
Response response = client.newCall(request).execute();

JSONArray array = new JSONArray(response.body().toString());

for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);

NewsData data = new NewsData(object.getInt("id"), object.getString("title"), object.getString("describtion"));
news_list.add(data);

}

} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
System.out.print("End of content");
}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
rvAdapter.notifyDataSetChanged();
}
};

task.execute(id);
}



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

我想在我的 RecyclerView 中显示标题,所以在 RecyclerAdapter 中:

public class HomeRecyclerAdapter extends RecyclerView.Adapter<HomeRecyclerAdapter.ViewHolder> {

private Context context;
private List<NewsData> news_list;

public HomeRecyclerAdapter(Context context, List<NewsData> news_list) {
this.context = context;
this.news_list = news_list;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_cardviewhome, parent, false);

return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

holder.title.setText(news_list.get(position).getTitle());

}

@Override
public int getItemCount() {

return news_list.size();
}


public class ViewHolder extends RecyclerView.ViewHolder{
public TextView title;

public ViewHolder(View itemView){
super(itemView);
title = (TextView) itemView.findViewById(R.id.title_cView);


}
}

为了传输我的数据,我使用了 Getters 和 Setters:

public class NewsData {

private int id;
private String title, describtion;

public NewsData(int id, String title, String describtion){
this.id = id;
this.title = title;
this.describtion = describtion;
}


public int getId() {
return id;
}

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

public String getTitle(){
return title;
}

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

public String getDescribtion(){
return describtion;
}

public void setDescribtion(String describtion) {
this.describtion = describtion;
}

但现在我遇到了问题,当我运行它时,它崩溃了。它崩溃是因为

NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at com.example.andreundjulia.test.Adapters.HomeRecyclerAdapter.getItemCount(HomeRecyclerAdapter.java:53)

有人可能知道该怎么做或这里出了什么问题吗?我真的不能继续了:/我希望你们能理解我的英语,它不是很好但是我已经想谢谢你们,因为你们点击了这个帖子并试图提供帮助:-)

最佳答案

您正在使用空列表将数据设置到适配器中:rvAdapter = new HomeRecyclerAdapter(getActivity(), news_list); .然后在下面初始化 news_list = new ArrayList<>() .将初始化移动到适配器创建之前

关于java - Android:在RecyclerView中显示AsyncTask的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880326/

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