переменная, возвращающая значение null в arraylist

#java #android #arraylist

#java #Android #arraylist

Вопрос:

Я столкнулся с проблемой, когда я пытаюсь передать некоторую информацию другому действию, но arraylist, который я использую для хранения данных, возвращает null для уникального идентификатора, который я использую для определения каждой записи arraylist.

Это класс:

 import java.util.ArrayList;

public class NutritionLessons {
    public NutritionLessons(String lessonName, String lessonCode, String lessonCategory, String lessonContent){
        this.lessonName = lessonName;
        this.lessonCode = lessonCode;
        this.lessonCategory = lessonCategory;
        this.lessonContent = lessonContent;
    }

    private String lessonName;
    private String lessonCode;
    private String lessonCategory;
    private String lessonContent;

    public String getLessonName() {
        return lessonName;
    }

    public void setLessonName(String lessonName) {
        this.lessonName = lessonName;
    }

    public String getLessonCode() {
        return lessonCode;
    }

    public void setLessonCode(String lessonCode) {
        this.lessonCode = lessonCode;
    }

    public String getLessonCategory() {
        return lessonCategory;
    }

    public void setLessonCategory(String lessonCategory) {
        this.lessonCategory = lessonCategory;
    }

    public String getLessonContent() {
        return lessonContent;
    }

    public void setLessonContent(String lessonContent) {
        this.lessonContent = lessonContent;
    }
  

Это arraylist в классе

 public static ArrayList<NutritionLessons> getLessons(){
    ArrayList<NutritionLessons> lessons = new ArrayList<>();

lessons.add(new NutritionLessons("Basic Food Groups", "eee", "Nutrition Essentials",
            "blah"));
lessons.add(new NutritionLessons("Food", "abc", "abc", "abc"));

    return lessons;

}
  

И это цикл для каждого, который я использую, чтобы вернуть информацию об уроке в другое действие

 public static NutritionLessons getLessons(String lessonCode){ //lessonCode: null
    ArrayList<NutritionLessons> lessons = NutritionLessons.getLessons();
    for(final NutritionLessons lesson : lessons){
        if(lesson.getLessonCode().equals(lessonCode)){
            return lesson;
        }
    }
        return lessons.get(lessons.size()-1);
    }
  

В нем говорится, что lessonCode возвращает значение null при передаче, и я не уверен, почему, любая помощь была бы очень признательна!

РЕДАКТИРОВАТЬ: прикрепление мест, которые я назвал getLesson(String lessonCode) — идея состоит в том, чтобы иметь информацию в arraylist в представлении recycler и последующее действие с lessonContent

Код RecyclerView:

 public class nutritionLessonsList extends AppCompatActivity {
    RecyclerView mRecyclerView2;
    private nutritionLessonsAdapter mAdapter2;
    private RecyclerView.LayoutManager layoutManager2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nutrition_lessons_list);
        mRecyclerView2 = findViewById(R.id.recyclerView2);
        mRecyclerView2.setHasFixedSize(true);
        layoutManager2 = new LinearLayoutManager(this);
        mRecyclerView2.setLayoutManager(layoutManager2);
        nutritionLessonsAdapter.Listener listener = new nutritionLessonsAdapter.Listener(){
            @Override
            public void onClick(View view, String lessonCode) {
                launchDetailActivity(lessonCode);
            }
        };

        mAdapter2 = new nutritionLessonsAdapter(NutritionLessons.getLessons(), listener);
        mRecyclerView2.setAdapter(mAdapter2);

    }

    private void launchDetailActivity(String message){
        Intent intent = new Intent(nutritionLessonsList.this, nutritionLessonPage.class);
        intent.putExtra(nutritionLessonPage.INTENT_MESSAGE, message);
        startActivity(intent);
    }
}
  

Код страницы последующего урока

 public class nutritionLessonPage extends AppCompatActivity {

    public static final String INTENT_MESSAGE = "au.edu.unsw.infs3634.gamifiedlearning.intent_message";

    TextView mLessonName;
    TextView mLesson;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nutrition_lesson_page);

        Intent intent = getIntent();
        String lessonCode = intent.getStringExtra(INTENT_MESSAGE);
        final NutritionLessons nutritionLessons = NutritionLessons.getLessons(lessonCode);

//        //Instantiating the view objects
        mLessonName = findViewById(R.id.tvLessonName2);
        mLesson = findViewById(R.id.tvLesson);

//        //Set the content value
        mLessonName.setText(nutritionLessons.getLessonName());
        mLesson.setText(nutritionLessons.getLessonContent());

    }
}
  

Я хочу добавить, что, когда я просматриваю recyclerview на странице урока, передается только последний элемент в массиве (т. е. lessons.add(новые уроки питания («Еда», «abc», «abc», «abc»));) независимо от того, какую строку RecyclerView я нажимаю

Комментарии:

1. «В нем говорится, что lessonCode возвращает значение null при передаче» — что именно вы имеете в виду под этим? Вы имеете в виду, что параметр to getLessons имеет значение null? Если это так, проблема будет в коде, вызывающем этот метод, который вы нам не показали.

2. Вы говорите, что аргумент метода lessonCode равен null ?

3. Привет, ребята, спасибо за ответ — извините, я не был ясен раньше — я отредактировал его, чтобы показать, где отладчик говорит, что код возвращает null. Мне кажется, что код урока из arraylists не передается в идентифицируемый цикл для каждого цикла, но я не совсем уверен @ADM

4. извините, если это глупый вопрос, я все еще пытаюсь изучить это, и поэтому я не слишком опытен

5. getLessons(String lessonCode) невозможно вернуть значение null, потому что u обработал оба случая. Как и куда вы звоните getLessons(String lessonCode) ? добавьте его с вопросом. Помимо этого, вам действительно следует избегать вызова метода одного действия из другого, есть лучшие способы сделать это. Поскольку она статична, на данный момент она работает нормально

Ответ №1:

Это касается вашего последнего утверждения о том, что «независимо от того, какую строку RecyclerView я нажимаю»

Это потому, что lessonCode, который вы передаете при вызове getLessons(), отличается и отсутствует в вашем arraylist, и вы обработали этот случай, когда lessonCode не совпадает, а затем возвращает последний элемент —

  return lessons.get(lessons.size()-1);
  

И последний элемент в вашем списке — это —

 new NutritionLessons("Food", "abc", "abc", "abc")
  

Надеюсь, я правильно понял или поправьте меня, если я неправильно понял ваш вопрос.