Я пытаюсь взять данные, полученные из базы данных mySQL, и отобразить их в виде переработчика с помощью onclicklistener.Представление переработчика просто показывает заголовок, и когда пользователь нажимает на представление, оно переносит их на страницу «подробностей» для всей остальной информации.Пока что все работает, за исключением того, что когда я нажимаю на карту держателя, приложение вылетает. Я продолжаю получать нулевой указатель на вызов метода onclick.
E / AndroidRuntime: FATAL EXCEPTION: main Process: com.example.fit,PID: 28226 java.lang.NullPointerException: попытка вызвать метод интерфейса 'java.lang.Object java.util.List.get (int)' для нулевой ссылки на объект в com.example.fit.WorkoutLogFragment.onItemClick (WorkoutLogFragment.java: 69) at com.example.fit.WorkoutLogAdapter $ WorkoutLogViewHolder $ 1.onClick (WorkoutLogAdapter.java:59)
Вот код класса, в котором создается исключение.
public class WorkoutLogFragment extends Fragment implements WorkoutLogAdapter.OnItemClickListener {
public static final String EXTRA_AUTOMATIC_THOUGHT = "automaticThought";
public static final String EXTRA_DISTORTIONS = "distortions";
public static final String EXTRA_CHALLENGE_THOUGHT = "challengeThought";
public static final String EXTRA_ALTERNATIVE_THOUGHT = "alternativeThought";
private SharedPreferences loginPref;
private RecyclerView recyclerView;
private WorkoutLogAdapter adapter;
private List<WorkoutLogRecycler> workoutLogList;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_workout_log, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
loginPref = getContext().getSharedPreferences("loginPref", Context.MODE_PRIVATE);
int userId = loginPref.getInt("userId", 0);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
Call<List<WorkoutLogRecycler>> call = RetrofitClient.getInstance()
.getApi()
.getLogs(userId);
call.enqueue(new Callback<List<WorkoutLogRecycler>>() {
@Override
public void onResponse(Call<List<WorkoutLogRecycler>> call, Response<List<WorkoutLogRecycler>>response) {
List<WorkoutLogRecycler> workoutLogRecyclers = response.body();
adapter = new WorkoutLogAdapter(getActivity(),workoutLogRecyclers);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(WorkoutLogFragment.this);
}
@Override
public void onFailure(Call<List<WorkoutLogRecycler>> call, Throwable t) {
}
});
}
@Override
public void onItemClick(int position) {
**WorkoutLogRecycler clickedItem = workoutLogList.get(position);**
Fragment workoutLogDetails = new WorkoutLogDetailsFragment();
Bundle args = new Bundle();
args.putString(EXTRA_AUTOMATIC_THOUGHT, clickedItem.getAutomaticThought());
args.putString(EXTRA_CHALLENGE_THOUGHT, clickedItem.getChallengeThought());
args.putString(EXTRA_ALTERNATIVE_THOUGHT, clickedItem.getAlternativeThought());
args.putInt(EXTRA_DISTORTIONS, clickedItem.getDistortions());
workoutLogDetails.setArguments(args);
FragmentTransaction workoutLogTransaction = getActivity().getSupportFragmentManager().beginTransaction();
workoutLogTransaction.replace(R.id.fragment_container, workoutLogDetails);
workoutLogTransaction.commit();
}
}
Эта строка кода вызывает ошибку в соответствии с журналом отладки.WorkoutLogRecycler clickedItem = workoutLogList.get (position);