繁体   English   中英

Android:在RecyclerView中显示AsyncTask的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM