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 |
댓글