상세 컨텐츠

본문 제목

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회

안드로이드

by aries574 2022. 3. 2. 18:22

본문


앞으로 SQLite, RecyclerView를

통해서 연락처 만드는 방법을

알아보겠습니다. 

내용이 많다 보니 조회, 등록, 수정, 삭제 별로

나눠 올리겠습니다. 

이번에는 조회 부분입니다. 


목차

1. 실행 화면

2. 연락처 클래스 만들기

3. 연락처  화면 만들기

4. 연락처 어뎁터 만들기

5. 연락처 DB 만들기

6. 메인 화면 구성 activity_main.xml

7. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

2. 연락처 클래스 만들기

2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법

 

[안드로이드 스튜디오] 자바 클래스 생성하는 방법

이번 시간에는 안드로이드 스튜디오(AndroidStudio)에서 자바 클래스 생성하는 방법을 알아보겠습니다. 기본으로 안드로이드 스튜디오 프로젝트를 생성하면 아래 화면처럼 MainActivity가 기본으로 생

aries574.tistory.com

 

PhoneBook.java

 - 설명 - 

 1. 연락처에 들어갈 데이터 변수가 있는 클래스입니다.

 2. 아이디, 이름, 전화번호, 사진으로 구성되어있습니다. 

public class PhoneBook {

    private String phone_id; //아이디
    private String phone_name; //이름
    private String phone_number; //전화번호
    private byte[] user_image; //사진

    public PhoneBook(String phone_id, String phone_name, String phone_number, byte[] user_image) {
        this.phone_id = phone_id;
        this.phone_name = phone_name;
        this.phone_number = phone_number;
        this.user_image = user_image;
    }

    public String getPhone_id() {
        return phone_id;
    }

    public void setPhone_id(String phone_id) {
        this.phone_id = phone_id;
    }

    public String getPhone_name() {
        return phone_name;
    }

    public void setPhone_name(String phone_name) {
        this.phone_name = phone_name;
    }

    public String getPhone_number() {
        return phone_number;
    }

    public void setPhone_number(String phone_number) {
        this.phone_number = phone_number;
    }

    public byte[] getUser_image() {
        return user_image;
    }

    public void setUser_image(byte[] user_image) {
        this.user_image = user_image;
    }
}



3. 연락처  화면 만들기

2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법

 

[안드로이드 스튜디오] 레이아웃 추가하는 방법

이번 시간에는 안드로이드 스튜디오에서 레이아웃 추가하는 방법을 알아보겠습니다. 안드로이드 프로젝트를 만들면 java폴더에는 MainActivity 파일이 있고, res -> layout 폴더에는 activity_main.xml 파일

aries574.tistory.com

 

phone_item.xml

 - 설명 - 

 1. 연락처 리스트 화면입니다. 

 2. 아이디, 사진, 이름순으로 되어있습니다. 

<?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"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        app:cardCornerRadius="3dp"
        app:cardElevation="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/id_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="1"
                android:textSize="40sp"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/user_image"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_marginStart="10dp" />

            <TextView
                android:id="@+id/name_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="이름"
                android:textSize="20sp"
                android:textStyle="bold" />

        </LinearLayout>
    </androidx.cardview.widget.CardView>

</LinearLayout>

 

 

4. 연락처 어뎁터 만들기

 PhoneBookAdapter.java

 - 설명 - 

 1. 연락처 데이터와 연락처 화면을 연결해주는

 역할을 하는 클래스입니다. 

public class PhoneBookAdapter extends RecyclerView.Adapter<PhoneBookAdapter.MyViewHolder>{

    Context context;

    ArrayList<PhoneBook> phoneList = new ArrayList<>();

    PhoneBookAdapter(Context context){

        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(context);

        View view = inflater.inflate(R.layout.phone_item, parent, false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

        PhoneBook phone = phoneList.get(position);

        holder.id_text.setText(String.valueOf(phone.getPhone_id())); //아이디
        holder.name_text.setText(String.valueOf(phone.getPhone_name())); // 이름

        byte[] phoneImage = phone.getUser_image(); //사진
        Bitmap bitmap = BitmapFactory.decodeByteArray(phoneImage, 0, phoneImage.length);
        holder.imageView.setImageBitmap(bitmap);
    }

    @Override
    public int getItemCount() {
        return phoneList.size();
    }

    /**
     * 아이템 삭제
     * @param position 위치
     */
    public void removeItem(int position){

        phoneList.remove(position);
    }


    public void addItem(PhoneBook item){

        phoneList.add(item);
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView id_text, name_text;
        ImageView imageView;
        LinearLayout mainLayout;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            id_text = itemView.findViewById(R.id.id_text);
            name_text = itemView.findViewById(R.id.name_text);
            imageView = itemView.findViewById(R.id.user_image);
            mainLayout = itemView.findViewById(R.id.main_layout);
        }
    }
}

 

5. 연락처 DB 만들기

 PhoneBookDB.java

  - 설명 - 

 1. 연락처가 저장되는 데이터베이스 클래스입니다.

 2. 데이터베이스를 생성하고, 테이블을 만들고

  연락처를 조회하는 기능을 구현했습니다. 

public class PhoneBookDB extends SQLiteOpenHelper {

    private Context context;
    public static final String DATABASE_NAME = "address.db";
    public static final int DATABASE_VERSION = 1;

    public static final String TABLE_NAME   = "phone_info";
    public static final String COLUMN_ID    = "_id";
    public static final String COLUMN_NAME  = "phone_name";
    public static final String COLUMN_PHONE_NUMBER = "phone_number";
    public static final String COLUMN_PHONE_PHOTO = "user_image";


    /**
     * DB 생성
     * @param context 컨텍스트
     */
    public PhoneBookDB(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    }


    /**
     * 테이블 생성
     * @param db 데이터베이스
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

        String query = "CREATE TABLE " + TABLE_NAME +
                " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COLUMN_NAME + " TEXT, " +
                COLUMN_PHONE_NUMBER + " TEXT, " +
                COLUMN_PHONE_PHOTO + " BLOP);";
        db.execSQL(query);
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    /**
     * 주소록 전체 가져오기
     * @return
     */
    public Cursor readAllData(){

        String query = "SELECT * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = null;
        if(db != null){
            cursor = db.rawQuery(query, null);
        }

        return cursor;
    }
}



6. 메인 화면 구성 activity_main.xml

 - 설명 - 

1. RecyclerView를 통해 연락처 리스트가 보입니다.

 2. 연락처가 없으면 없다는 표시를 텍스트뷰를 통해 

 구현했습니다. 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerView"/>

    <TextView
        android:id="@+id/noData_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="No Data"
        android:textSize="30sp"
        android:layout_centerInParent="true"/>

</RelativeLayout>


7. 메인 코드 구현 MainActivity.java

 - 설명 - 

 1. 데이터베이스를 호출해서 데이터가 있으면

 화면에 보여집니다. 

public class MainActivity extends AppCompatActivity {

    PhoneBookDB db;

    ArrayList<PhoneBook> phoneList = new ArrayList<>();

    RecyclerView recyclerView;

    PhoneBookAdapter adapter;

    TextView noDataText;

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

        //데이터 유무 텍스트
        noDataText = findViewById(R.id.noData_text);

        //리스트 보여줄 화면
        recyclerView = findViewById(R.id.recyclerView);
        
        //어뎁터
        adapter = new PhoneBookAdapter(MainActivity.this);

        //어뎁터 등록
        recyclerView.setAdapter(adapter);
        
        //레이아웃 설정
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

        //DB 생성
        db = new PhoneBookDB(MainActivity.this);

        //데이터 가져오기
        storeDataInArrays();
    }


    /**
     * 데이터 가져오기
     */
    void storeDataInArrays(){

        Cursor cursor = db.readAllData();

        if(cursor.getCount() == 0){
            noDataText.setVisibility(noDataText.VISIBLE);
        }else{

            noDataText.setVisibility(noDataText.GONE);

            while (cursor.moveToNext()){

                PhoneBook phone = new PhoneBook(cursor.getString(0),
                        cursor.getString(1),
                        cursor.getString(2),
                        cursor.getBlob(3));

                //데이터 등록
                phoneList.add(phone);
                adapter.addItem(phone);

                //적용
                adapter.notifyDataSetChanged();
            }
        }
    }
}

2022.03.01 - [안드로이드] - [안드로이드] 온보딩(Onboarding) 페이지 쉽게 만드는 방법

 

[안드로이드] 온보딩(Onboarding) 페이지 쉽게 만드는 방법

이번 시간에는 앱 실행 시에 앱에 관한 설명들을 페이지 형태로 넘겨가면서 보여주는 형태인 온보딩(Onboarding) 페이지 만드는 방법에 대하여 알아보겠습니다. 1. 실행 화면 2. 라이브러리 등록

aries574.tistory.com

2022.02.27 - [안드로이드] - [안드로이드] 이미지(Image) 흐림 효과(Blur) 쉽게 주는 방법

 

[안드로이드] 이미지(Image) 흐림효과(Blur) 쉽게 주는 방법

이번 시간에는 이미지(Image) 흐림 효과(Blur)를 쉽게 주는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActi..

aries574.tistory.com

2022.02.26 - [안드로이드] - [안드로이드] 시작화면(Splash) 쉽게 만드는 방법

 

[안드로이드] 시작화면(Splash) 쉽게 만드는 방법

이번 시간에는 시작화면(Splash) 쉽게 만드는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 시작화면 Drawable 파일 만들기 3. 시작화면 Activity 만들기 4. 메인 화면 구성 activity_main.xml 1. 실행..

aries574.tistory.com

반응형

관련글 더보기

댓글 영역