아하
생활

생활꿀팁

멋진발구지178
멋진발구지178

Firebase 데이터베이스 구현 중 값이 가져와지지 않습니다.

package com.example.test01.chat; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.example.test01.R; import com.example.test01.SignUp; import com.example.test01.model.ChatModel; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.List; import java.util.Objects; public class MessageActivity extends AppCompatActivity{ private String destinationUID; private FirebaseAuth mAuth; private String uid; private String ChatRoomUid; private EditText editText; private Button button; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); assert user != null; final String uid = user.getUid(); destinationUID = getIntent().getStringExtra("destinationUID"); final Button button = findViewById(R.id.messageActivity_button); editText = (EditText)findViewById(R.id.messageActivity_editText); /*if(ChatRoomUid == null){ ChatModel chatModel = new ChatModel(); FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ChatRoomRef = database.getReference(); chatModel.users.put(uid, true); chatModel.users.put(destinationUID,true); ChatRoomRef.child("ChatRooms").push().setValue(chatModel); }else{*/ button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { ChatModel chatModel = new ChatModel(); chatModel.users.put(uid,true); chatModel.users.put(destinationUID,true); final String Messss = ""+destinationUID+" "+uid+" "+ChatRoomUid+""; if(ChatRoomUid == null){ button.setEnabled(false); FirebaseDatabase.getInstance().getReference().child("ChatRooms").push() .setValue(chatModel).addOnSuccessListener(new OnSuccessListener<Void>(){ @Override public void onSuccess(Void aVoid) { CheckChatRoom(); Toast.makeText(MessageActivity.this,Messss, Toast.LENGTH_SHORT).show(); } }); } else{ ChatModel.Comment comment = new ChatModel.Comment(); comment.uid = uid; comment.message = editText.getText().toString(); FirebaseDatabase.getInstance().getReference().child("ChatRooms").child(ChatRoomUid).child("comments").push().setValue(comment).addOnCompleteListener(new OnCompleteListener<Void>(){ @Override public void onComplete(@NonNull Task<Void> task) { editText.setText(""); } }); }} }); CheckChatRoom(); } void CheckChatRoom(){ FirebaseDatabase.getInstance().getReference() .child("ChatRooms").child("users").orderByChild(destinationUID).equalTo(true).addListenerForSingleValueEvent(new ValueEventListener(){ @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for(DataSnapshot item : dataSnapshot.getChildren()){ //왜 여기서 널포인터익셉션뜰까??? ChatModel chatModel = item.getValue(ChatModel.class); assert chatModel != null; if (chatModel.users.containsKey(uid)) { ChatRoomUid = item.getKey(); button.setEnabled(true); chatModel.users.clear(); } } } @Override public void onCancelled(@NonNull DatabaseError error) { Toast.makeText(MessageActivity.this, "그냥 실패", Toast.LENGTH_SHORT).show(); } }); } }

해당 코드인데 주석 부분에서 RoomUid가 null로 호출 되는데

원하는 방햐응로 호출하고 싶습니다.. 그래서 그런지 comments 데이터베이스도

삽입이 되지 않습니다... 도와주시면 감사하겠습니다!

55글자 더 채워주세요.
1개의 답변이 있어요!
  • 검은밀잠자리283
    검은밀잠자리283

    주석에 있는 ChatRoomUid 값은 널이 나오는 것이 맞는 것 같습니다.

    Activity가 실행되고나서 ChatRoomUid라는 변수를 초기화 해주는 부분이 없습니다.

    Firebase에서 ChatRoomUid 값을 받기 위한 CheckChatRoom 메소드가 나중에 호출 되다보니 그런 것 같습니다.

    코드를 돌려봐야 정확하게 해결이 가능해보입니다.

    예상으로는 CheckChatRoom 메소드가 실행되고 ChatRoomUid 를 가지고 온뒤에 onCreate 에 있는 내용을 실행 시키면 될것 같습니다.