Skip to content

Commit

Permalink
[Remote Data] 게시글 서버 연결
Browse files Browse the repository at this point in the history
1. 게시글 수정 요청 데이터 클래스 수정
2. 게시글 수정 기능 수정
3. 게시글 작성 뷰: 내전공 카테고리 선택 리스트 서버연결변경(내 전공만 뜨도록)

closr #96
  • Loading branch information
88yhtserof committed Mar 18, 2021
1 parent a97c9a4 commit a34c20d
Show file tree
Hide file tree
Showing 15 changed files with 180 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import kr.nutee.nutee_android.data.main.home.Image
data class RequestRewritePost(
val title:String,
val content:String,
val image: Array<Image?>?
val images: Array<Image?>?
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import kr.nutee.nutee_android.data.ProfileImage
data class ProfileBody(
val id: Int,
val nickname: String,
val profileUrl: ProfileImage,
val interests: ArrayList<String>,
val majors: ArrayList<String>
val image: ProfileImage,
val interests: List<String>,
val majors: List<String>,
val postNum:Int,
val commentNum:Int,
val likeNum:Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,10 @@ interface RequestInterface {

/*User Profile*/
// load user
@GET("/auth/user/me")
fun requestUserData(@Header("Authorization") Authorization:String): Call<ResponseProfile>
//@Header("Cookie") token: String
@GET("/sns/user/me")
fun requestUserData(
@Header("Authorization") Authorization:String
): Call<ResponseProfile>

//load user posts
@GET("/sns/user/{id}/posts")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.add_activity.*
import kr.nutee.nutee_android.R
import kr.nutee.nutee_android.data.App
import kr.nutee.nutee_android.data.TestToken
import kr.nutee.nutee_android.data.main.add.RequestRewritePost
import kr.nutee.nutee_android.data.main.add.RequestPost
import kr.nutee.nutee_android.data.main.home.Image
Expand All @@ -26,18 +25,22 @@ import kr.nutee.nutee_android.ui.extend.dialog.customDialog
import kr.nutee.nutee_android.ui.extend.imageSetting.createImageMultipart
import kr.nutee.nutee_android.ui.main.fragment.home.detail.HomeDetailActivity
import kr.nutee.nutee_android.ui.member.register.bottomsheet.ModalSelectCategory
import kr.nutee.nutee_android.ui.member.register.bottomsheet.ModalSelectDepartment
import kr.nutee.nutee_android.ui.member.register.bottomsheet.ModalSelectMyMajorsList


/*
created by jinsu47555
* 글쓰기
*
* created by 88yhtserofG
* DESC: 2.0버전으로 수정 및 구현
*/
@Suppress("UNCHECKED_CAST")
class AddActivity : AppCompatActivity(), View.OnClickListener {

val requestToServer = RequestToServer
private val REQUEST_CODE_PICK_IMAGE = 1001
private val modalSelectDepartment by lazy { ModalSelectDepartment() }
private val modalSelectMyMajorsList by lazy { ModalSelectMyMajorsList() }
private val modalSelectCategory by lazy { ModalSelectCategory() }

var selectedImage = arrayListOf<Uri>()
Expand Down Expand Up @@ -78,18 +81,7 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {
addContent.setText(content)
addTitle.setText(title)
addCategory.text = category

//이미지 수정 기능 구현 필요함
if(intent.hasExtra("rewriteImage")){
val rewriteImageList: ArrayList<Image>
= intent.getParcelableArrayListExtra("rewriteImage")
rewriteImageList.forEach { image ->
val uri=Uri.parse(image.src)
selectedImage.add(uri)
Log.d("selectedImageAdd",selectedImage.size.toString())
}
setImageAndAdpater()
}
addMajor.visibility=View.GONE
}

private fun init() {
Expand All @@ -104,7 +96,7 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {

private fun onClickMajor(view: View) {
showModel(view)
modalSelectDepartment.setItemClickListener {
modalSelectMyMajorsList.setItemClickListener {
addMajor.text = it
addCategory.apply {
isActivated=true
Expand All @@ -126,7 +118,7 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {

private fun showModel(view: View) {
when (view) {
addMajor -> modalSelectDepartment.show(supportFragmentManager, null)
addMajor ->modalSelectMyMajorsList.show(supportFragmentManager, null)
addCategory->modalSelectCategory.show(supportFragmentManager,null)
}
}
Expand All @@ -136,6 +128,7 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {
R.id.text_back_button -> onBackPressed()
R.id.img_upload_image_btn -> openImageChooser()
R.id.text_create_button -> {
Log.d("Network", "사진 포함 게시글 수정 버튼 클릭")
if(checkPostBlank()){
if (intent.hasExtra("content"))
uploadRewriteContent()
Expand Down Expand Up @@ -179,16 +172,15 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {

private fun uploadRewriteContent() {
loadingDialog.startLoadingDialog()
if (selectedImage.size > 0) {
rewritePostHasImage()
} else
// if (selectedImage.size > 0) {
// rewritePostHasImage()
// } else
rewritePostNonImage()
}

private fun rewritePostNonImage() {
requestToServer.backService.requestRewritePost(
"Bearer "+ App.prefs.local_login_token,
//App.prefs.local_login_token,
RequestRewritePost(
addTitle.text.toString(),
addContent.text.toString(),
Expand All @@ -209,18 +201,17 @@ class AddActivity : AppCompatActivity(), View.OnClickListener {
Log.d("Network", "이미지포함 업로드 시작 이미지 null 여부${createImageMultipart(selectedImage).isNullOrEmpty()}")
requestToServer.backService.requestUploadImage(createImageMultipart(selectedImage))
.customEnqueue(
onSuccess = {
onSuccess = { uploadIt ->
Log.d("Network", "사진준비 완료")
Log.d("Network", "사진 개수 ${it.body()?.body?.size}")
val imagesArray= arrayOfNulls<Image>(it.body()?.body!!.size)
it.body()?.body!!.forEachIndexed() { index, str ->
Log.d("Network", "사진 개수 ${uploadIt.body()?.body?.size}")
val imagesArray= arrayOfNulls<Image>(uploadIt.body()?.body!!.size)
uploadIt.body()?.body!!.forEachIndexed() { index, str ->
val src=Image(str)
imagesArray[index] = src
}
Log.d("Network", "imagesArray 사진 개수 ${imagesArray.size}")
requestToServer.backService.requestRewritePost(
"Bearer "+ App.prefs.local_login_token,
//App.prefs.local_login_token,
RequestRewritePost(
addTitle.text.toString(),
addContent.text.toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ class HomeDetaiProfilelActivity : AppCompatActivity() {

private fun bindUserProfile(userID: Int, res: ResponseProfile) {
tv_profile_detail_nickname.text = res.body.nickname
val userImageLoad = setImageURLSetting(res.body.profileUrl.src)
val userImageLoad = setImageURLSetting(res.body.image.src)
Glide.with(applicationContext).load(userImageLoad).into(img_profile)
App.prefs.url = res.body.profileUrl.src
App.prefs.url = res.body.image.src

img_profile_detail_more.setOnClickListener {
profileMore(userID, res)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class HomeDetailActivity : AppCompatActivity(),View.OnClickListener,
}

private fun loadDetailPage() {
Log.d("ididid", "포스트아이디 확인 ${this.postId}")
Log.d("loadDetailPage", "포스트아이디 확인 ${this.postId}")
RequestToServer.backService
.requestDetail(
"Bearer "+ App.prefs.local_login_token,
Expand Down Expand Up @@ -216,10 +216,11 @@ class HomeDetailActivity : AppCompatActivity(),View.OnClickListener,
contentMoreEvent(responseBody.user,
View.GONE,{},
{//게시글 수정
if (responseBody.images.isNullOrEmpty1()) {
rewritePost(responseBody)
}
else customDialogSingleButton(getString(R.string.UnableRewritePost))
// if (responseBody.images.isNullOrEmpty1()) {
// rewritePost(responseBody)
// }
// else customDialogSingleButton(getString(R.string.UnableRewritePost))
rewritePost(responseBody)
},
{//게시글 삭제
RequestToServer.backService.requestDelete(
Expand Down Expand Up @@ -323,14 +324,8 @@ class HomeDetailActivity : AppCompatActivity(),View.OnClickListener,
intent.putExtra("content", detailContent.text.toString())
intent.putExtra("category", responseBody?.category)
intent.putExtra("postId", responseBody?.id)
//이미지 수정 기능 구현 필요함
if (responseBody?.images?.isNullOrEmpty1() == false){
val imageArrayList = responseBody.images.toCollection(ArrayList())
intent.putParcelableArrayListExtra("rewriteImage", imageArrayList)
finish()
startActivity(intent)
return
}
Log.d("Network", "사진 포함 게시글 수정 테스트")

finish()
startActivity(intent)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class ProfileFragment : Fragment() {
}

private fun requestUserData() {
RequestToServer.authService
RequestToServer.backService
.requestUserData("Bearer "+ TestToken.testToken)//App.prefs.local_login_token)
.customEnqueue(
onSuccess = {response -> bindUserProfile(response.body()!!) },
Expand All @@ -77,9 +77,9 @@ class ProfileFragment : Fragment() {

private fun bindUserProfile(res: ResponseProfile) {
text_user_name?.text = res.body.nickname
val userImageLoad = setImageURLSetting(res.body.profileUrl.src)
val userImageLoad = setImageURLSetting(res.body.image.src)
Glide.with(requireContext()).load(userImageLoad).into(img_profile_image)
App.prefs.url = res.body.profileUrl.src
App.prefs.url = res.body.image.src
}

// private fun loadUserProfileList(id: Int) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package kr.nutee.nutee_android.ui.member.register.bottomsheet

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kr.nutee.nutee_android.databinding.ItemModelListBinding

class ModalMyMajorsListAdapter(
private val itemClickListener: ((String) -> Unit)? = null,
private val itemClickEndEvent: () -> Unit
) : RecyclerView.Adapter<ModalMyMajorsListAdapter.ViewHolder>() {
private val listData = mutableListOf<String>()

fun addAllData(datas: List<String>) {
listData.clear()
listData.addAll(datas)
notifyDataSetChanged()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemModelListBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.onBind(listData[position])
}

override fun getItemCount(): Int = listData.size

inner class ViewHolder(
private val binding: ItemModelListBinding
) : RecyclerView.ViewHolder(binding.root) {
fun onBind(item: String) {
binding.itemModelListText.text = item
itemView.setOnClickListener {
itemClickListener?.invoke(item)
itemClickEndEvent.invoke()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ import kr.nutee.nutee_android.databinding.ModelBottomListBinding
import kr.nutee.nutee_android.network.RequestToServer
import kr.nutee.nutee_android.ui.extend.customEnqueue

/*
* 카테고리 단일 선택
* */


class ModalSelectCategory: BottomSheetDialogFragment() {
private var binding: ModelBottomListBinding? = null
private lateinit var adapter: ModalCategoryListAdapter
Expand Down Expand Up @@ -36,7 +41,8 @@ class ModalSelectCategory: BottomSheetDialogFragment() {
}

private fun initView() {
requireBinding().modelBottomTitle.text = "전공을 선택해주세요"
requireBinding().modelBottomTitle.text = "카테고리를 선택해주세요."
requireBinding().modelBottomTextButton.visibility=View.GONE
setCategoryAdapter()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ class ModalSelectDepartment : BottomSheetDialogFragment() {
}

private fun initView() {
requireBinding().modelBottomTitle.text = "전공을 선택해주세요"
requireBinding().modelBottomTitle.text = "전공을 선택해주세요."
requireBinding().modelBottomTextButton.visibility=View.GONE
setCategoryAdapter()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class ModalSelectMultipleCategory : BottomSheetDialogFragment() {
}

private fun initView() {
requireBinding().modelBottomTitle.text = "카테고리를 선택해주세요"
requireBinding().modelBottomTitle.text = "카테고리를 선택해주세요."
setCategoryAdapter()
requireBinding().modelBottomTextButton.setOnClickListener {
completionButtonListener?.invoke(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package kr.nutee.nutee_android.ui.member.register.bottomsheet

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kr.nutee.nutee_android.data.App
import kr.nutee.nutee_android.databinding.ModelBottomListBinding
import kr.nutee.nutee_android.network.RequestToServer
import kr.nutee.nutee_android.ui.extend.customEnqueue

class ModalSelectMyMajorsList : BottomSheetDialogFragment() {
private var binding: ModelBottomListBinding? = null
private lateinit var adapter: ModalMyMajorsListAdapter
private var itemClickListener: ((String) -> Unit)? = null

fun setItemClickListener(listener: (String) -> Unit) {
this.itemClickListener = listener
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ModelBottomListBinding.inflate(inflater, container, false)
return requireBinding().root
}

private fun requireBinding(): ModelBottomListBinding = binding
?: error("binding is not init")

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
}

private fun initView() {
requireBinding().modelBottomTitle.text = "전공을 선택해주세요."
requireBinding().modelBottomTextButton.visibility=View.GONE
setCategoryAdapter()
}

private fun setCategoryAdapter() {
adapter = ModalMyMajorsListAdapter(
itemClickListener,
{ dismiss() }
)
requireBinding().modelList.adapter = adapter
loadDepartmentList()
}

private fun loadDepartmentList() {
RequestToServer.backService
.requestUserData(
"Bearer "+ App.prefs.local_login_token
)
.customEnqueue(
onSuccess = { adapter.addAllData(it.body()?.body?.majors!!) }
)
}
}
7 changes: 7 additions & 0 deletions app/src/main/res/drawable/radius_top.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:topLeftRadius="50dp" />
<corners android:topRightRadius="50dp" />
<solid android:color="#FFFFFF" />
</shape>
Loading

0 comments on commit a34c20d

Please sign in to comment.