Сбой в адаптере, в методе getItemCount nullpointer - PullRequest
0 голосов
/ 26 декабря 2018

Когда я запускаю свой проект в режиме отладки, он не вызывает проблем, но когда я втискиваюсь в нормальный студийный режим Android, он падает.

Мой адаптер

public class InfoAdapter extends RecyclerView.Adapter<InfoAdapter.ViewHolder> {
Context context;
Screen screen;

public InfoAdapter(Context context, Screen screen) {
    this.context = context;
    this.screen = screen;
}

@NonNull
@Override
public InfoAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.info_list, parent, false);
    return new InfoAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull InfoAdapter.ViewHolder holder, int position) {
    holder.name.setText(screen.getInfo().get(position).getName());
    holder.data.setText(screen.getInfo().get(position).getData());

}

@Override
public int getItemCount() {
    return screen.getInfo().size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView name, data;

    public ViewHolder(View view) {
        super(view);

        name = view.findViewById(R.id.name);
        data = view.findViewById(R.id.data);
    }
}

}

Мой фрагмент

public class InvestmentFragment extends Fragment implements FoundView{

TextView titleInvestment, fundNameInvestment, whatIs, definition, riskTitle, infoTitle, fundMonth,
        cdiMonth, fundYear, cdiYear, fundTwelveMonths, cdiTwelveMonths;
View view;

RecyclerView recyclerViewInfo;
RecyclerView recyclerViewDownInfo;
public Screen screen = new Screen();
InfoAdapter adapter;
DownInfoAdapter downInfoAdapter;
public List<DownInfo> downInfos = new ArrayList<>();

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_investment, container, false);

    onResume();

    //Recycler info items
    recyclerViewInfo = view.findViewById(R.id.recyclerviewInfo);
    recyclerViewInfo.setHasFixedSize(true);
    final LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerViewInfo.setNestedScrollingEnabled(false);
    recyclerViewInfo.setLayoutManager(layoutManager);
    adapter = new InfoAdapter(getContext(), screen);
    recyclerViewInfo.setAdapter(adapter);

    //RecyclerView DownInfo items
    recyclerViewDownInfo = view.findViewById(R.id.recyclerviewDowninfo);
    recyclerViewDownInfo.setHasFixedSize(true);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerViewDownInfo.setNestedScrollingEnabled(false);
    recyclerViewDownInfo.setLayoutManager(linearLayoutManager);
    downInfoAdapter = new DownInfoAdapter(getContext(), screen);
    recyclerViewDownInfo.setAdapter(downInfoAdapter);

    TextView textInvestment = view.findViewById(R.id.text_investment);
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "DINEngschriftStd.otf");
    textInvestment.setTypeface(font);

    titleInvestment = view.findViewById(R.id.title);
    fundNameInvestment = view.findViewById(R.id.fundName);
    whatIs = view.findViewById(R.id.whatIs);
    definition = view.findViewById(R.id.definition);
    riskTitle = view.findViewById(R.id.riskTitle);
    infoTitle = view.findViewById(R.id.infoTitle);
    fundMonth = view.findViewById(R.id.fundMonth);
    cdiMonth = view.findViewById(R.id.cdiMonth);
    fundYear = view.findViewById(R.id.fundYear);
    cdiYear = view.findViewById(R.id.cdiYear);
    fundTwelveMonths = view.findViewById(R.id.fundTwelveMonths);
    cdiTwelveMonths = view.findViewById(R.id.cdiTwelveMonths);



    return view;

}


@Override
public void onResume() {
    super.onResume();
    FoundPresenter foundPresenter = new FoundPresenter(this);
    foundPresenter.getFounds();
}

@Override
public void founds(Screen screen) {
    adapter = new InfoAdapter(getContext(), screen);
    downInfoAdapter = new DownInfoAdapter(getContext(), screen);
    recyclerViewInfo.setAdapter(adapter);
    recyclerViewDownInfo.setAdapter(downInfoAdapter);
    titleInvestment.setText(screen.getTitle());
    fundNameInvestment.setText(screen.getFundName());
    whatIs.setText(screen.getWhatIs());
    definition.setText(screen.getDefinition());
    riskTitle.setText(screen.getRiskTitle());
    infoTitle.setText(screen.getInfoTitle());
    fundMonth.setText(screen.getMoreInfo().getMonth().getFund()+"%");
    cdiMonth.setText(screen.getMoreInfo().getMonth().getFund()+"%");
    fundYear.setText(screen.getMoreInfo().getYearMoreInfo().getFund()+"%");
    cdiYear.setText(screen.getMoreInfo().getYearMoreInfo().getcDI()+"%");
    fundTwelveMonths.setText(screen.getMoreInfo().get_12months().getFund()+"%");
    cdiTwelveMonths.setText(screen.getMoreInfo().get_12months().getcDI()+"%");
}

}

java.lang.NullPointerException: Попытка вызвать метод интерфейса 'int java.util.List.size () 'для пустой ссылки на объект в com.example.allan.santanderapp.adapter.InfoAdapter.getItemCount (InfoAdapter.java:41)

1 Ответ

0 голосов
/ 26 декабря 2018

Сообщение об исключении очень четкое.

Возможно, вы не заполняете свой объект Screen списком информации, поэтому infos имеет значение null и вы пытаетесь вызвать метод size() вэтот нулевой объект.

Пожалуйста, покажите, когда вы имеете дело с экранным объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...