android - JSON 响应在适配器类上不可读,但在使用改造 http 库的 logcat 上可见
问题描述
我已按照https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/的指南获取 json 响应。但是在解析适配器类后,RecyclerView 上没有响应。但是 JSON 响应在我创建的 logcat 中是可见的。请在下面查看我的脚本:
EkonomiFragment.java
final RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerViewEkonomi);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext().getApplicationContext()));
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<EkonomiResponse> call = apiService.getEkonomi(rssUrlE);
call.enqueue(new Callback<EkonomiResponse>(){
@Override
public void onResponse(Call<EkonomiResponse> call, Response<EkonomiResponse> response){
List<Ekonomi> ekonomis = response.body().getItems();
for(int x=0; x<ekonomis.size(); x++){
Log.i("Judul", ekonomis.get(x).getTitle());
}
Log.d(TAG, "JSON Ekonomi: " + ekonomis);
//Toast.makeText(rootView.getContext(), "Berhasil", Toast.LENGTH_LONG).show();
recyclerView.setAdapter(new EkonomiAdapter(ekonomis, R.layout.list_item_berita_e, rootView.getContext()));
//recyclerView.setAdapter(new EkonomiAdapter(ekonomis, R.layout.list_item_berita_e, rootView.getContext()));
}
@Override
public void onFailure(Call<EkonomiResponse> call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
Toast.makeText(rootView.getContext(), "Gagal", Toast.LENGTH_LONG).show();
}
});
EkonomiAdapter.java
public class EkonomiAdapter extends RecyclerView.Adapter<EkonomiAdapter.EkonomiViewHolder>{
private List<Ekonomi> ekonomis;
private int rowLayout;
private Context context;
public static class EkonomiViewHolder extends RecyclerView.ViewHolder {
CardView ekonomiLayout;
TextView newsTitle;
TextView pubDate;
WebView newsDescription;
public EkonomiViewHolder(View v) {
super(v);
ekonomiLayout = (CardView) v.findViewById(R.id.berita_layout_e);
newsTitle = (TextView) v.findViewById(R.id.title_e);
pubDate = (TextView) v.findViewById(R.id.pubDate_e);
newsDescription = (WebView) v.findViewById(R.id.description_e);
}
}
public EkonomiAdapter(List<Ekonomi> ekonomis, int rowLayout, Context context) {
this.ekonomis = ekonomis;
this.rowLayout = rowLayout;
this.context = context;
}
@NonNull
@Override
public EkonomiViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new EkonomiViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull EkonomiViewHolder holder, int position) {
Log.i("JSON", ekonomis.get(position).getTitle());
holder.newsTitle.setText(ekonomis.get(position).getTitle());
holder.pubDate.setText(ekonomis.get(position).getPubDate());
holder.newsDescription.getSettings().setJavaScriptEnabled(true);
holder.newsDescription.loadData(ekonomis.get(position).getDescription(), "text/html; charset=utf-8", "UTF-8");
}
@Override
public int getItemCount() {
return 0;
} }
解决方案
为什么 getItemCount 为 0?它会使回收者视图不读取列表。所以在getItemCount方法中write,return ekonomis.size();
推荐阅读
- multithreading - 处于“就绪”状态的线程是否获得锁
- java - java中的范围问题
- docker - 如果拉新图像,如何保留 docker 图像
- sql-server - 自动创建具有特定名称的 SQL 数据库
- java - 如何结合switch语句和if case?
- python - 如何将 Dash 布局保存到 HTML 文件
- hibernate - 如何将 sql 转换为 jpa 条件查询以获取 hibernate 或 eclipse 链接
- sql-server - 在存储过程中添加列名作为参数不起作用
- ios - “removeFromSuperview”永远不会在 UIApplication 上工作?
- mysql - 根据来自不同表的匹配列查询以填充 ID 列