안드로이드 스튜디오로 카풀 앱을 제작하고 있습니다. 카카오 로그인 API를 사용하여, 각 사용자는 카카오 ID로 구별됩니다. 사용자들이 입력한 목적지 정보가 파이어베이스 실시간 데이터베이스에 올라갑니다. 직접 제작한 findMatching() 함수를 통해 나와 동일한 목적지를 입력한 사용자가 발견되면, 나와 상대의 실시간 위치를 카카오 지도에 띄우려고 합니다. 다음은 findMatching() 함수의 앞부분 입니다.
private void findMatching() {
String myKakaoID = LoginActivity.mykakaoID;
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("Users");
usersRef.child(myKakaoID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String myDestination = dataSnapshot.child("destination").getValue(String.class);
String myUserType = dataSnapshot.child("usertype").getValue(String.class);
Query matchingquery = usersRef.orderByChild("destination").equalTo(myDestination);
matchingquery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
boolean foundMatch = false;
User myUser = dataSnapshot.child(myKakaoID).getValue(User.class);
for (DataSnapshot matchSnapshot : dataSnapshot.getChildren()) {
User matchUser = matchSnapshot.getValue(User.class);
String matchKakaoID = matchSnapshot.getKey();
my_ID = myKakaoID;
match_ID = matchKakaoID;
String matchName = matchUser.getName();
if (!matchKakaoID.equals(myKakaoID) && matchUser.getUsertype() != myUser.getUsertype() && !isMatching) {
foundMatch = true;
isMatching = true; // 중복 매칭 방지용 변수 값 변경
Toast.makeText(MatchingActivity.this, matchName+"님과 매칭되었습니다! ", Toast.LENGTH_LONG).show();
//매칭후 내 목적지정보, 유저타입 삭제
DatabaseReference currentUserRef = usersRef.child(myKakaoID);
currentUserRef.child("destination").setValue(null);
currentUserRef.child("usertype").setValue(null);
// 매칭된 사용자의 목적지 정보, 유저타입 삭제
/*DatabaseReference matchedUserRef = usersRef.child(matchKakaoID);
matchedUserRef.child("destination").setValue(null);
matchedUserRef.child("usertype").setValue(null);*/
Intent mapintent = new Intent(MatchingActivity.this, MainActivity.class);
mapintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mapintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mapintent);
break;
}
}
그런데,
for 문 안에 my_ID, match_ID변수는 해당 클래스 안에 public static string으로 선언되어있습니다.
다른 클래스에서 다음과 같이 참조해서 변수에 저장하면 해당 부분에서 nullpointerexception이 발생합니다.
String my_kakaoID =MatchingActivity.my_ID;
String match_kakaoID =MatchingActivity.match_ID;
NULL값이 스태틱변수에 저장되는것인지 아니면 참조가 제대로 이루어지지 않는 것인지 아니면 파이어베이스 문제인지 궁금합니다.
추가 정보가 필요하시면 알려주세요. 답변 부탁드립니다. 감사합니다...