Справка по отладке: нулевой указатель в режиме просмотра - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь взять данные, полученные из базы данных 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);

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