상세 컨텐츠

본문 제목

[안드로이드] Firebase Realtime Database ListView JSON 수정, 삭제 part3

안드로이드

by aries574 2022. 3. 11. 14:16

본문


이번 시간에는 Firebase Realtime Database에

저장된 데이터를 ListView에 보여주고 나서 

아이템을 수정하고, 삭제하는 방법을

알아보겠습니다. 

이전 포스팅에 이어하기 때문에 따라 하시려면

먼저 보시고 오시면 됩니다. 

2022.03.10 - [안드로이드] - [안드로이드] Firebase Realtime Database ListView JSON 읽기, 쓰기 part2

 

[안드로이드] Firebase Realtime Database ListView JSON 읽기, 쓰기 part2

이번 시간에는 Firebase Realtime Database에 데이터를 추가하고, 다시 호출해서 ListView를 통해 보여주는 읽기, 쓰기 예제를 만들어 보겠습니다. Firebase Realtime Database 설정은 아래 링크로 가셔서 따라..

aries574.tistory.com

Firebase Realtime Database 설정은 아래

링크로 가셔서 따라 하시면 됩니다. 

2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1

 

[안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part

이번 시간에는 Firebase를 통해 데이터베이스에 간단한 데이터를 쓰고 읽는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 프로젝트 만들기 3. 앱 만들기 4. 데이터 베이스 만들기 5. 라이브러

aries574.tistory.com


목차

1. 실행 화면

2. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

2. 메인 코드 구현 MainActivity.java

- 설명 - 

 - 수정하기 전 데이터를 담기 위한 변수 추가

String sOldValue;

 

 -  등록버튼을 수정할 때도 사용하게 변경했습니다. 

 - orderByChild를 통해 데이터를 정렬하고, equalTo를 통해 해당 데이터를 가져옵니다. 

 - getRef().child를 통해 해당 위치와 데이터를 가져와 데이터를 수정합니다. 

 - 수정한 뒤 입력창을 초기화, 버튼명을 "쓰기"로 변경합니다. 

 - 데이터 등록, 수정 기능 -

//데이터 등록
addBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        //입력값 변수에 담기
        String sName = nameEdit.getText().toString();

        if(addBtn.getText().toString().equals("쓰기")){

            //키 생성
            String sKey = databaseReference.push().getKey();

            //sKey가 null이 아니면 sKey값으로 데이터를 저장한다.
            if(sKey != null){

                databaseReference.child(sKey).child("value").setValue(sName);

                //입력창 초기화
                nameEdit.setText("");
            }
        }else{ //수정
            //orderByChild: value값으로 정렬
            //equalTo: 해당값 반환
            Query query = databaseReference.orderByChild("value").equalTo(sOldValue);

            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {

                    for(DataSnapshot dataSnapshot : snapshot.getChildren()){

                        //수정된 입력창의 값으로 데이터를 수정한다. 
                        dataSnapshot.getRef().child("value").setValue(sName);

                        //입력창 초기화
                        nameEdit.setText("");

                        //버튼값 쓰기로 변경
                        addBtn.setText("쓰기");
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
        }
    }
});

 

- 수정할 아이템을 클릭하면 현재 값을 변수에 담습니다. 

- 입력창에 선택 값을 보여줍니다.

 - 수정할 아이템을 클릭하면 버튼명이 수정으로 변경됩니다. 

 - 아이템 클릭 이벤트 -

 //리스트뷰 아이템 클릭 이벤트
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

         //변수에 현재값을 담는다.
         sOldValue = arrayList.get(position);

         //입력창에 선택값을 보여준다.
         nameEdit.setText(sOldValue);

         //버튼명을 수정으로 바꾼다.
         addBtn.setText("수정");
     }
 });

 

 - 아이템을 길게 누르면 다이얼로그 창을 보여줍니다. 

 - YES를 누르면 삭제 기능, CANCEL을 누르면 창닫기 

 - 아이템 길게 클릭 이벤트 - 

//리스트뷰 아이템 길게 클릭 이벤트
 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
     @Override
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {

         String sValue = arrayList.get(position);

         AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
         builder.setTitle("삭제");
         builder.setMessage("삭제하시겠습니까?");
         builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialogInterface, int i) {

                 //쿼리 초기화
                 Query query = databaseReference.orderByChild("value").equalTo(sValue);

                 query.addListenerForSingleValueEvent(new ValueEventListener() {
                     @Override
                     public void onDataChange(@NonNull DataSnapshot snapshot) {

                         for(DataSnapshot dataSnapshot : snapshot.getChildren()){

                             //데이터 삭제
                             dataSnapshot.getRef().removeValue();
                         }
                     }

                     @Override
                     public void onCancelled(@NonNull DatabaseError error) {
                         Toast.makeText(MainActivity.this, "error:" + error.getMessage(),
                                 Toast.LENGTH_SHORT).show();
                     }
                 });
             }
         });

         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialogInterface, int i) {
                 //닫기
                 dialogInterface.dismiss();
             }
         });

         //보여주기
         builder.show();

         return true;
     } //onItemLongClick
 });

 

 

- 전체 코드 -

public class MainActivity extends AppCompatActivity {

    ArrayList<String> arrayList = new ArrayList<>();
    ArrayAdapter<String> adapter;

    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;

    ListView listView;

    String sOldValue;

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

        //컴포넌트 변수에 담기
        EditText nameEdit = findViewById(R.id.name_edit);
        Button addBtn = findViewById(R.id.add_btn);
        listView = findViewById(R.id.list_view);

        //어뎁터 초기화
        adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, arrayList);

        //데이터베이스 초기화
        firebaseDatabase = FirebaseDatabase.getInstance();

        //레퍼런스 초기화
        databaseReference = firebaseDatabase.getReference().child("Data");

        //데이터 조회
        getValue();

        //데이터 등록
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //입력값 변수에 담기
                String sName = nameEdit.getText().toString();

                if(addBtn.getText().toString().equals("쓰기")){

                    //키 생성
                    String sKey = databaseReference.push().getKey();

                    //sKey가 null이 아니면 sKey값으로 데이터를 저장한다.
                    if(sKey != null){

                        databaseReference.child(sKey).child("value").setValue(sName);

                        //입력창 초기화
                        nameEdit.setText("");
                    }
                }else{ //수정
                    //orderByChild: value값으로 정렬
                    //equalTo: 해당값 반환
                    Query query = databaseReference.orderByChild("value").equalTo(sOldValue);

                    query.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {

                            for(DataSnapshot dataSnapshot : snapshot.getChildren()){

                                //수정된 입력창의 값으로 데이터를 수정한다. 
                                dataSnapshot.getRef().child("value").setValue(sName);

                                //입력창 초기화
                                nameEdit.setText("");

                                //버튼값 쓰기로 변경
                                addBtn.setText("쓰기");
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {

                        }
                    });
                }
            }
        });

        //리스트뷰 아이템 클릭 이벤트트
       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

                //변수에 현재값을 담는다.
                sOldValue = arrayList.get(position);

                //입력창에 선택값을 담는다.
                nameEdit.setText(sOldValue);

                //버튼명을 수정으로 바꾼다.
                addBtn.setText("수정");
            }
        });

       //리스트뷰 아이템 길게 클릭 이벤트
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {

                String sValue = arrayList.get(position);

                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("삭제");
                builder.setMessage("삭제하시겠습니까?");
                builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        //쿼리 초기화
                        Query query = databaseReference.orderByChild("value").equalTo(sValue);

                        query.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {

                                for(DataSnapshot dataSnapshot : snapshot.getChildren()){

                                    //데이터 삭제
                                    dataSnapshot.getRef().removeValue();
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError error) {
                                Toast.makeText(MainActivity.this, "error:" + error.getMessage(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });

                builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //닫기
                        dialogInterface.dismiss();
                    }
                });

                //보여주기
                builder.show();

                return true;
            } //onItemLongClick
        });
   }//onCreate

    //파이어베이스에서 데이터 가져오기
    private void getValue() {

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                //리스트 초기화
                arrayList.clear();

                for(DataSnapshot dataSnapshot : snapshot.getChildren()){

                    //데이터 가져오기(value 이름으로 된 값을 변수에 담는다.
                    String sValue = dataSnapshot.child("value").getValue(String.class);

                    //리스트에 변수를 담는다.
                    arrayList.add(sValue);
                }
                //리스트뷰 어뎁터 설정
                listView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

                Toast.makeText(MainActivity.this, "error:" + error.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

}

2022.02.24 - [안드로이드] - [안드로이드] 그리드 레이아웃(GridLayout) 카드뷰(CardView) 디자인 꾸미는 방법

 

[안드로이드] 그리드레이아웃(GridLayout) 카드뷰(CardView) 디자인 꾸미는 방법

이번 시간에는 그리드 레이아웃(GridLayout)과 카드뷰(CardView)를 사용해서 대시보드 느낌의 디자인을 쉽게 만들어 보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구성 activity_main.xml 1. 실행 화면 2. 메인

aries574.tistory.com

2022.02.23 - [안드로이드] - [안드로이드] 원형 메뉴(CircleMenu) 쉽게 만드는 방법

 

[안드로이드] 원형메뉴(CircleMenu) 쉽게 만드는 방법

이번 시간에는 원형버튼을 클릭하면 퍼지면서 원형메뉴를 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity

aries574.tistory.com

2022.02.22 - [안드로이드] - [안드로이드] NavigationDrawer 쉽게 꾸미는 방법

 

[안드로이드] NavigationDrawer 쉽게 꾸미는 방법

이번 시간에는 Navigation Drawer 쉽게 꾸미는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 프래그먼트 생성 4. 메인 화면 구성 activity_main.xml 5. 메인 코드 구현 MainActiv..

aries574.tistory.com

반응형

관련글 더보기

댓글 영역