본문 바로가기
SpringBoot

[SpringBoot] Android(Member)

by 엘딘 2022. 3. 20.

1. build.gradle (! 추가)

추가!
plugins{
	...
!    id 'kotlin-kapt'
!    id 'kotlin-android-extensions'
}

android {
   defaultConfig {
       ...
!       multiDexEnabled true
    }
}

dependencies {
!    implementation 'com.squareup.retrofit2:retrofit:2.9.0'  // Retrofit 라이브러리
!    implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Gson 변환기 라이브러리
!    implementation 'com.github.bumptech.glide:compiler:4.11.0'
!    implementation "com.squareup.retrofit2:converter-scalars:2.9.0" // Scalars 변환기 라이브러리
!    implementation 'com.android.support:multidex:1.0.3'

    // recyclerview
!    implementation 'androidx.recyclerview:recyclerview:1.1.0'           // 추가
!    implementation 'com.github.bumptech.glide:glide:4.11.0'             // 추가
!    annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'     // 추가
    
    ...
}

 

2. AndroidManifest.xml (! 추가)

추가!
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.membersprrestful">

!    <uses-permission android:name="android.permission.INTERNET"/>
!    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    ...
    
    <application
    	...
!        android:usesCleartextTraffic="true">
    
</manifest>

 

 

3. CustomAdapter(recylerView를 위해서)

class CustomAdapter(val context: Context, val dataList: ArrayList<MemberDto>) :RecyclerView.Adapter<CustomAdapter.ItemViewHolder>() {

	// id, name, email을 하나로 묶어주기 위해서 객체로 묶어줌
    inner class ItemViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

        val userId = itemView.findViewById<TextView>(R.id.idText)
        val userName = itemView.findViewById<TextView>(R.id.nameText)
        val userEmail = itemView.findViewById<TextView>(R.id.emailText)

        fun bind(dataVo:MemberDto, context: Context){
            userId.text = dataVo.id
            userName.text = dataVo.name
            userEmail.text = dataVo.email

            // 이동
        }
    }

	// CustomAdapter 멤버구현
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.view_item_layout, parent, false)
        return ItemViewHolder(view)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        holder.bind(dataList[position], context)
    }

    override fun getItemCount(): Int {
        return dataList.size
    }
}

 

 

4. MemberDto

// parcelable: adapter로 연결할때 추가
class MemberDto(val id:String?, val pwd:String?, val name:String?, val email:String?, val auth: Int) : Parcelable {

    // parcelable 구현추가시 자동 작성
    // this: 매개변수
    constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readInt()
    ) { }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(id)
        parcel.writeString(pwd)
        parcel.writeString(name)
        parcel.writeString(email)
        parcel.writeInt(auth)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<MemberDto> {
        override fun createFromParcel(parcel: Parcel): MemberDto {
            return MemberDto(parcel)
        }

        override fun newArray(size: Int): Array<MemberDto?> {
            return arrayOfNulls(size)
        }
    }

    override fun toString(): String {
        return super.toString()
    }
}

 

 

5. MainActivity

class MainActivity : AppCompatActivity() {

	// 먼저 테스트!!!!
    val list = arrayListOf<MemberDto>(
        MemberDto("kim", "kkk", "김", "kim@naver.com", 3 ),
        MemberDto("park", "ppp", "박", "park@naver.com", 3 ),
        MemberDto("lee", "lll", "이", "lee@naver.com", 3 )
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

	    // 
        var recyclerView = findViewById<RecyclerView>(R.id.recycler_view)

        val memlist = MemberDao.getInstance().allMember()
        println(memlist[0].name)

        val mAdapter = CustomAdapter(this, memlist)
        recyclerView.adapter = mAdapter

        val layout = LinearLayoutManager(this)
        recyclerView.layoutManager = layout
        recyclerView.setHasFixedSize(true)

    }
}

 

 

6. RetrofitClient(Singleton)

class RetrofitClient {

	// singleton
    companion object{
        private var instance: Retrofit? = null

        fun getInstance(): Retrofit?{
            if(instance == null) {
                val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
                StrictMode.setThreadPolicy(policy)

                // Gson 은 Java 객체를 JSON 으로 변환할 수 있다
                val gson = GsonBuilder()
                    .setLenient()
                    .create()

                instance = Retrofit.Builder()
                    .baseUrl("http://ip주소:3000/")
                    .addConverterFactory(GsonConverterFactory.create(gson))     // object, integer
                    .addConverterFactory(ScalarsConverterFactory.create())      // 문자열 리턴받는 경우
                    .build()
            }

            return instance
        }
    }
}

 

 

7. MemberDao.kt

interface MemberService{

    @GET("/allMember")
    fun allMember(): Call<List<MemberDto>>
}

class MemberDao {

    companion object{
        var memberDao:MemberDao? = null

        fun getInstance():MemberDao{

            if(memberDao == null){
                memberDao = MemberDao()
            }
            return memberDao!!
        }
    }

    fun allMember(): ArrayList<MemberDto> {
        val retrofit = RetrofitClient.getInstance()

        val service = retrofit?.create(MemberService::class.java)
        val call = service?.allMember()
        val response = call?.execute()

        return response?.body() as ArrayList<MemberDto>
    }
}

 

 

'SpringBoot' 카테고리의 다른 글

ajax  (0) 2022.04.12
[SpringBoot] SpringToolSuite  (0) 2022.03.23
[SpringBoot] Android !Retrofit!  (0) 2022.03.20
[SpringBoot] 게시판  (0) 2022.02.28
[SpringBoot] Front  (0) 2022.02.23

댓글