การตอบสนอง JSON ไม่สามารถอ่านได้ในคลาสอะแดปเตอร์ แต่มองเห็นได้บน logcat โดยใช้ไลบรารี http ชุดติดตั้งเพิ่มเติม

ฉันได้ทำตามคำแนะนำจาก https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/ เพื่อรับการตอบสนอง json แต่การตอบสนองไม่ได้มาบน RecyclerView หลังจากแยกวิเคราะห์คลาส Adapter แต่การตอบสนองของ 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;
} }

person Kalam Taufiq    schedule 19.10.2018    source แหล่งที่มา
comment
คุณช่วยโพสต์การเข้าสู่ระบบ onBindViewHolder ได้ไหม?   -  person aolphn    schedule 19.10.2018
comment
ฉันได้เพิ่มบันทึกที่ onBindViewHolder แล้ว แต่มันไม่ปรากฏใน logcat   -  person Kalam Taufiq    schedule 19.10.2018
comment
ฉันเดาว่าอะแดปเตอร์ของคุณใช้งานไม่ได้จริง ๆ มีบันทึกข้อผิดพลาดในคอนโซล logcat ของคุณหรือไม่   -  person aolphn    schedule 19.10.2018
comment
คำแนะนำของฉัน:1. สร้างรายการและเพิ่มข้อมูลบางส่วนลงไป จากนั้นตั้งค่ารายการให้กับอะแดปเตอร์ของคุณ 2.ตรวจสอบว่าทำงานได้ดีหรือไม่   -  person aolphn    schedule 19.10.2018
comment
@KalamTaufiq หาก getItemCount() ส่งคืนนับเป็น 0 ในคลาสอะแดปเตอร์ คลาสอะแดปเตอร์จะไม่รันโค้ดเพิ่มเติม ดังนั้น การเข้าสู่ระบบภายใน onBindViewHolder() จะไม่ช่วยคุณแก้ไขข้อบกพร่องของโค้ด ตรวจสอบคำตอบของ @Mujahid Khan ด้านล่างเพื่อดูวิธีแก้ไข   -  person Shashanth    schedule 20.10.2018


คำตอบ (1)


ทำไม getItemCount จึงเป็น 0 จะทำให้มุมมองผู้รีไซเคิลไม่อ่านรายการ ดังนั้นในเมธอด getItemCount ให้เขียน return ekonomis.size();

person Mujahid Khan    schedule 19.10.2018