마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

HomeActivity에서 MedicalRecordActivity로 넘어갈때 오류

0 추천
public class HomeActivity extends AppCompatActivity {
    private ViewPager2 mPager;
    private FragmentStateAdapter pagerAdapter;
    private int num_page = 4;
    private CircleIndicator3 mIndicator;
    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_home);

        // FirebaseAuth 초기화
        mAuth = FirebaseAuth.getInstance();

        // ViewPager2 설정
        mPager = findViewById(R.id.viewpager);
        pagerAdapter = new MyAdapter(this, num_page);
        mPager.setAdapter(pagerAdapter);

        // Indicator 설정
        mIndicator = findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
        mIndicator.createIndicators(num_page, 0);

        // ViewPager 설정
        mPager.setCurrentItem(1000); // 무한 스크롤 효과를 위해 설정
        mPager.setOffscreenPageLimit(4);

        mPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                mIndicator.animatePageSelected(position % num_page);
            }
        });

        // 시스템 바를 위한 padding 설정
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        // 버튼 클릭 리스너 설정
        findViewById(R.id.petInfoButton).setOnClickListener(v -> {
            startActivity(new Intent(HomeActivity.this, PetListActivity.class));
        });

        findViewById(R.id.myInfoButton).setOnClickListener(v -> {
            startActivity(new Intent(HomeActivity.this, MyInfoActivity.class));
        });

        findViewById(R.id.button3).setOnClickListener(v -> {
            startActivity(new Intent(HomeActivity.this, MapActivity.class));
        });

        findViewById(R.id.button4).setOnClickListener(v -> {
            startActivity(new Intent(HomeActivity.this, CommunityActivity.class));
        });

        // MedicalRecordActivity로 이동
        findViewById(R.id.button5).setOnClickListener(v -> {
            // MedicalRecordActivity로 이동하는 Intent 생성
            Intent intent = new Intent(HomeActivity.this, MedicalRecordActivity.class);
            startActivity(intent); // Intent 실행
        });
    }
파이어베이스에 자료를 아예 지웠을 땐 button4를 누르면 HomeActivity에서 MedicalRecordActivity로 잘 넘어가지는데 MedicalRecordActivity에서 글쓰기 버튼을 누르면 MedicalRecordWriteActivity(기록 글쓰기 페이지) 로 넘어가지고 기록 글쓰고 저장하기를 누르고 다시 HomeActivity에서 button4를 누르면 작동이 안되고 그냥 꺼져버립니다 무슨 문제일까요? ㅠㅠ 자료 필요하시면 올려드리겠습니다!
이엥지 (120 포인트) 님이 2024년 11월 14일 질문
MedicalRecordActivity.java 코드입니다!

package com.example.healpet;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;

public class MedicalRecordActivity extends AppCompatActivity {

    private RecyclerView medicalRecordRecyclerView;
    private MedicalRecordAdapter adapter;
    private ArrayList<MedicalRecord> medicalRecords;
    private FirebaseFirestore db;

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

        medicalRecordRecyclerView = findViewById(R.id.medicalRecordRecyclerView);

        // RecyclerView 초기화
        medicalRecordRecyclerView = findViewById(R.id.medicalRecordRecyclerView);
        medicalRecordRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        // Firebase Firestore 초기화
        db = FirebaseFirestore.getInstance();

        // 데이터를 저장할 리스트
        medicalRecords = new ArrayList<>();

        // 어댑터 설정
        adapter = new MedicalRecordAdapter(medicalRecords);
        medicalRecordRecyclerView.setAdapter(adapter);

        // Firestore에서 데이터 가져오기
        loadMedicalRecords();

        // 뒤로가기 버튼 클릭 리스너
        Button backButton = findViewById(R.id.backButton);
        backButton.setOnClickListener(v -> {
            // 뒤로가기 버튼 클릭 시 이전 화면으로 돌아가기
            onBackPressed();
        });

        // 글쓰기 버튼 클릭 리스너
        Button writeButton = findViewById(R.id.writeButton);
        writeButton.setOnClickListener(v -> {
            // 글쓰기 버튼 클릭 시 WriteActivity로 이동
            Intent intent = new Intent(MedicalRecordActivity.this, MedicalRecordWriteActivity.class);
            startActivity(intent);
        });
    }

    // Firestore에서 내원 기록을 불러오는 메서드
    @SuppressLint("NotifyDataSetChanged")
    private void loadMedicalRecords() {
        db.collection("medical_records")  // Firestore의 'medical_records' 컬렉션
                .get()
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful()) {
                        QuerySnapshot documents = task.getResult();
                        if (documents != null) {
                            for (QueryDocumentSnapshot document : documents) {
                                // Firestore 데이터 모델에 맞게 MedicalRecord 객체 생성
                                String date = document.getString("date");  // "date" 필드 가져오기
                                String hospitalName = document.getString("hospitalName");  // "hospitalName" 필드 가져오기
                                String medicalDetails = document.getString("medicalDetails");  // "medicalDetails" 필드 가져오기

                                // MedicalRecord 객체 생성 후 리스트에 추가
                                MedicalRecord record = new MedicalRecord(date, hospitalName, medicalDetails);
                                medicalRecords.add(record);
                            }

                            // 어댑터에 데이터 갱신
                            adapter = new MedicalRecordAdapter(medicalRecords);
                            medicalRecordRecyclerView.setAdapter(adapter);
                        }
                    } else {
                        Toast.makeText(MedicalRecordActivity.this, "데이터 로드 실패", Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

1개의 답변

0 추천
어떤 에러가 나는지 먼저 체크하셔야 할 듯합니다. 말씀하신 걸로 봐서는 CommunityActivity에 저장했던 데이터를 불러오는 것 같은데, 이 부분에 문제가 있는 것으로 보여지기는 합니다. 에러 로그를 보시고 판단하시는게 빠를 것 같습니다.
spark (230,170 포인트) 님이 2024년 11월 17일 답변
...