앞으로 SQLite, RecyclerView를
통해서 연락처 만드는 방법을
알아보겠습니다.
내용이 많다 보니 조회, 등록, 수정, 삭제 별로
나눠 올리겠습니다.
이번에는 조회 부분입니다.
1. 실행 화면
2. 연락처 클래스 만들기
3. 연락처 화면 만들기
4. 연락처 어뎁터 만들기
5. 연락처 DB 만들기
6. 메인 화면 구성 activity_main.xml
7. 메인 코드 구현 MainActivity.java
2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법
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;
}
}
2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법
- 설명 -
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>
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);
}
}
}
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;
}
}
- 설명 -
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>
- 설명 -
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) 페이지 쉽게 만드는 방법
2022.02.27 - [안드로이드] - [안드로이드] 이미지(Image) 흐림 효과(Blur) 쉽게 주는 방법
[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세 (0) | 2022.03.04 |
---|---|
[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록 (0) | 2022.03.03 |
[안드로이드] 온보딩(Onboarding) 페이지 쉽게 만드는 방법 (0) | 2022.03.01 |
[안드로이드] 알림(Alerter) 쉽게 만드는 방법 (0) | 2022.02.28 |
[안드로이드] 이미지(Image) 흐림효과(Blur) 쉽게 주는 방법 (0) | 2022.02.27 |
댓글 영역