[英]Android: Displaying Data of AsyncTask in RecyclerView
我再次://我尝试设置一个AsyncTask。 这是我的代码,我在其中设置AsyncTask的片段活动:
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);
}
}
要传输我的数据,请使用Getter和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<>()
。 在创建适配器之前移动初始化。
您永远不会初始化news_list ,因此,当您调用rvAdapter = new HomeRecyclerAdapter(getActivity(), news_list);
您放置了一个空引用。
您需要先进行初始化:
List<NewsData> news_list = new ArrayList<>();
在片段的oncreateview中,您需要在设置适配器之前初始化arraylist
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.