이번 시간에는 Firebase Realtime Database에
등록된 사용자 정보를 가져와서 리스트로 보여
주는 방법에 대하여 알아보겠습니다.
이전 포스팅에 이어서 하기 때문에 먼저 보시고
오시면 됩니다.
2022.03.12 - [안드로이드] - [안드로이드] Firebase Realtime Database RecyclerView 사용자 등록하는 방법
Firebase Realtime Database 설정 부분은 아래 링크를
따라 하시면 됩니다.
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
- 설명 -
데이터베이스에서 사용자 정보를 가져옵니다.
DAOUser.java
//조회
public Query get(){
return databaseReference;
}
- 전체 코드 -
public class DAOUser {
private DatabaseReference databaseReference;
DAOUser(){
FirebaseDatabase db = FirebaseDatabase.getInstance();
databaseReference = db.getReference(User.class.getSimpleName());
}
//등록
public Task<Void> add(User user){
return databaseReference.push().setValue(user);
}
//조회
public Query get(){
return databaseReference;
}
}
파일명: list_item
2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:backgroundTint="#EFEBE9"
android:orientation="vertical"
app:cardCornerRadius="5dp"
app:cardElevation="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/name_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>
파일명: UserAdapter
- 설명 -
데이터와 화면을 연결해주는 기능을 합니다.
2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserVH>{
private Context context;
ArrayList<User> list = new ArrayList<>();
public UserAdapter(Context context, ArrayList<User> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public UserVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
return new UserVH(view);
}
@Override
public void onBindViewHolder(@NonNull UserVH holder, int position) {
User user = list.get(holder.getBindingAdapterPosition());
//이름
holder.nameText.setText(user.getUser_name());
}
@Override
public int getItemCount() {
return list.size();
}
class UserVH extends RecyclerView.ViewHolder {
TextView nameText;
CardView cardView;
public UserVH(@NonNull View itemView) {
super(itemView);
nameText = itemView.findViewById(R.id.name_text);
cardView = itemView.findViewById(R.id.card_view);
}
}
}
app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity
파일명: ListActivity
4-1 화면 activity_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ListActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv"/>
</LinearLayout>
4-2 코드 ListActivity.java
public class ListActivity extends AppCompatActivity {
RecyclerView recyclerView;
UserAdapter adapter;
//데이터베이스 객체
DAOUser dao;
//키 변수
String key = "";
ArrayList<User> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
recyclerView = findViewById(R.id.rv);
recyclerView.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
//어뎁터 설정
adapter = new UserAdapter(this, list);
//리싸이클러뷰 어뎁터 설정
recyclerView.setAdapter(adapter);
//데이터베이스 초기화
dao = new DAOUser();
loadData();
}
private void loadData() {
dao.get().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for(DataSnapshot data : snapshot.getChildren()){
User user = data.getValue(User.class);
//키값 가져오기
key = data.getKey();
//키값 담기
user.setUser_key(key);
//리스트에 담기
list.add(user);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
설명 파일 수정 AndroidManifest.xml
- 설명 -
1. 리스트화면에 뒤로가기 버튼이 생성되며, 뒤로가기를 누르면 메인화면으로 돌아옵니다.
<activity
android:name=".ListActivity"
android:exported="false"
android:parentActivityName=".MainActivity" />
- 설명 -
기존 화면에 리스트 버튼을 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<EditText
android:id="@+id/name_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:hint="이름"/>
<EditText
android:id="@+id/age_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="나이"/>
<Button
android:id="@+id/add_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="등록"/>
<Button
android:id="@+id/list_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="리스트"/>
</LinearLayout>
- 설명 -
리스트버튼 기능 구현
//리스트 버튼
Button listBtn = findViewById(R.id.list_btn);
listBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ListActivity.class);
startActivity(intent);
}
});
- 전체 코드 -
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText name_edit = findViewById(R.id.name_edit);
EditText age_edit = findViewById(R.id.age_edit);
Button addBtn = findViewById(R.id.add_btn);
DAOUser dao = new DAOUser();
//등록버튼
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//입력값 변수에 담기
String name = name_edit.getText().toString();//이름
String age = age_edit.getText().toString();//나이
User user = new User("", name, age);
//데이터베이스 사용자 등록
dao.add(user).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
Toast.makeText(getApplicationContext(), "성공",
Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(), "실패:" + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}
});
//리스트 버튼
Button listBtn = findViewById(R.id.list_btn);
listBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ListActivity.class);
startActivity(intent);
}
});
}//onCreate
}
2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회
2022.03.03 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록
2022.03.04 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세
[안드로이드] Firebase Realtime Database RecyclerView 사용자 삭제하는 방법 (0) | 2022.03.15 |
---|---|
[안드로이드] Firebase Realtime Database RecyclerView 사용자 수정하는 방법 (0) | 2022.03.14 |
[안드로이드] Firebase Realtime Database RecyclerView 사용자 등록하는 방법 (0) | 2022.03.12 |
[안드로이드] Firebase Realtime Database ListView JSON 수정, 삭제 part3 (0) | 2022.03.11 |
[안드로이드] Firebase Realtime Database ListView JSON 읽기, 쓰기 part2 (0) | 2022.03.10 |
댓글 영역