From 61fe13b37d8027592fce1e23280c284ed3340238 Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Wed, 22 May 2024 14:01:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E8=AE=BA=E3=80=81=E7=82=B9=E8=B5=9E?= =?UTF-8?q?=E3=80=81=E6=94=B6=E8=97=8F=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 +- .../Activity/BookInformationActivity.kt | 97 ++----- .../whut/jianshu/Activity/MyPostActivity.kt | 3 +- .../jianshu/Activity/PerceptionActivity.kt | 3 +- .../Perception_informationActivity.kt | 242 +++++++--------- .../jianshu/Activity/ReAddressActivity.kt | 46 ++- ...ificActivity.kt => SendMarkingActivity.kt} | 54 ++-- .../whut/jianshu/Adapter/CommentAdapter.kt | 80 +++--- .../jianshu/Adapter/GoodperceptionAdapter.kt | 70 ----- .../whut/jianshu/Adapter/MarkingAdapter.kt | 229 +++++++++++++++ .../whut/jianshu/Adapter/PerceptionAdapter.kt | 272 +++++++++++++----- .../whut/jianshu/Data/entity/Book_inf_bmob.kt | 10 - .../whut/jianshu/Data/entity/Collect_bmob.kt | 8 + .../edu/whut/jianshu/Data/entity/Like_bmob.kt | 8 + .../whut/jianshu/Data/entity/Marking_bmob.kt | 12 + .../jianshu/Data/entity/Perception_bmob.kt | 5 +- .../java/edu/whut/jianshu/Data/vo/Marking.kt | 10 + .../edu/whut/jianshu/Data/vo/Perception.kt | 9 +- app/src/main/res/drawable/collect1.png | Bin 0 -> 848 bytes app/src/main/res/drawable/collect2.png | Bin 0 -> 728 bytes .../res/drawable/color_lightsteelblue.xml | 4 + .../main/res/layout/activity_book_info.xml | 6 +- app/src/main/res/layout/activity_my.xml | 2 +- .../layout/activity_perception_infomation.xml | 14 +- ...dspecific.xml => activity_sendmarking.xml} | 16 +- app/src/main/res/layout/comment_item.xml | 49 ++-- .../main/res/layout/goodperception_item.xml | 18 +- app/src/main/res/layout/perception_item.xml | 10 +- 28 files changed, 782 insertions(+), 498 deletions(-) rename app/src/main/java/edu/whut/jianshu/Activity/{SendSpecificActivity.kt => SendMarkingActivity.kt} (54%) delete mode 100644 app/src/main/java/edu/whut/jianshu/Adapter/GoodperceptionAdapter.kt create mode 100644 app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt create mode 100644 app/src/main/java/edu/whut/jianshu/Data/entity/Collect_bmob.kt create mode 100644 app/src/main/java/edu/whut/jianshu/Data/entity/Like_bmob.kt create mode 100644 app/src/main/java/edu/whut/jianshu/Data/entity/Marking_bmob.kt create mode 100644 app/src/main/java/edu/whut/jianshu/Data/vo/Marking.kt create mode 100644 app/src/main/res/drawable/collect1.png create mode 100644 app/src/main/res/drawable/collect2.png create mode 100644 app/src/main/res/drawable/color_lightsteelblue.xml rename app/src/main/res/layout/{activity_sendspecific.xml => activity_sendmarking.xml} (88%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20b0364..1752988 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,8 +46,7 @@ - - + diff --git a/app/src/main/java/edu/whut/jianshu/Activity/BookInformationActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/BookInformationActivity.kt index 5fab3f1..559c0e9 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/BookInformationActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/BookInformationActivity.kt @@ -3,7 +3,6 @@ package edu.whut.jianshu.Activity import android.content.Context import android.content.Intent import android.util.Log -import cn.bmob.v3.Bmob import cn.bmob.v3.BmobQuery import cn.bmob.v3.exception.BmobException import cn.bmob.v3.listener.FindListener @@ -19,12 +18,9 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager import cn.bmob.v3.listener.SaveListener import com.bifan.txtreaderlib.ui.HwTxtPlayActivity import com.bumptech.glide.Glide -import edu.whut.jianshu.Adapter.GoodperceptionAdapter -import edu.whut.jianshu.Data.entity.BookShelf -import edu.whut.jianshu.Data.entity.Book_info_bmob -import edu.whut.jianshu.Data.entity.Bookcontent_bmob -import edu.whut.jianshu.Data.entity.Perception_bmob -import edu.whut.jianshu.Data.vo.Perception +import edu.whut.jianshu.Adapter.MarkingAdapter +import edu.whut.jianshu.Data.entity.* +import edu.whut.jianshu.Data.vo.Marking import edu.whut.jianshu.R import kotlinx.android.synthetic.main.activity_book_info.* import kotlinx.android.synthetic.main.bookinfo_title.* @@ -36,8 +32,8 @@ import java.io.InputStream class BookInformationActivity : AppCompatActivity() { - private lateinit var adapter: GoodperceptionAdapter - private val perceptionList = ArrayList() + private lateinit var adapter: MarkingAdapter + private val MarkingList = ArrayList() private var isCommented = false private lateinit var bookName: String private lateinit var authorName: String @@ -56,23 +52,33 @@ class BookInformationActivity : AppCompatActivity() { bookInfoTextView = findViewById(R.id.bookinfo_introduce) userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() sourceActivityClass = intent.getSerializableExtra("Source_Activity") as? Class<*> - loadPerceptions() + loadMarkings() setupRecyclerView() loadBookInfo() judgeInBookshelf() setClickListeners() - judgeComment() } - private fun loadPerceptions() { - val queryPerception = BmobQuery() - queryPerception.addWhereEqualTo("b_name", bookName) //查询指定书名的精彩点评 - queryPerception.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { + + private fun loadMarkings() { + val queryMarking = BmobQuery() + queryMarking.addWhereEqualTo("bookname", bookName) //查询指定书名的精彩点评 + queryMarking.findObjects(object : FindListener() { + override fun done(list: List, e: BmobException?) { if (e == null) { bookinfo_swipeRefresh.isRefreshing = false - list.forEach { perceptionList.add(Perception(it.objectId)) } + list.forEach { + if (it.userid == userId) { + when (it.grade) { + 1 -> b_henhao.setImageResource(R.drawable.recommend2) + 2 -> b_yiban.setImageResource(R.drawable.normal2) + 3 -> b_buxing.setImageResource(R.drawable.bad2) + } + } + MarkingList.add(Marking(it.objectId, it.countOfLike, it.countOfCollect, it.userid, it.grade, it.evaluation)) + } adapter.notifyDataSetChanged() + } else { Log.e("BookInfo", "Error loading perceptions: ${e.message}") } @@ -83,7 +89,7 @@ class BookInformationActivity : AppCompatActivity() { private fun setupRecyclerView() { val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL) bookinfo_recyclerView.layoutManager = layoutManager - adapter=GoodperceptionAdapter(perceptionList) + adapter=MarkingAdapter(MarkingList) bookinfo_recyclerView.adapter = adapter } @@ -216,12 +222,12 @@ class BookInformationActivity : AppCompatActivity() { private fun setCommentClickListeners() { if (!isCommented) { val commentClickListener = View.OnClickListener { - val intent = Intent(this, SendSpecificActivity::class.java) + val intent = Intent(this, SendMarkingActivity::class.java) intent.putExtra("bookname", bookName) when (it.id) { - R.id.b_henhao -> intent.putExtra("comment_rank", 1) - R.id.b_yiban -> intent.putExtra("comment_rank", 2) - R.id.b_buxing -> intent.putExtra("comment_rank", 3) + R.id.b_henhao -> intent.putExtra("evaluation_grade", 1) + R.id.b_yiban -> intent.putExtra("evaluation_grade", 2) + R.id.b_buxing -> intent.putExtra("evaluation_grade", 3) } ContextCompat.startActivity(this, intent, null) } @@ -233,53 +239,6 @@ class BookInformationActivity : AppCompatActivity() { } } -// private fun updateBookComment(isRecommended: Boolean) { -// if (!isCommented) { -// isCommented = true -// val queryBook = BmobQuery() -// queryBook.addWhereEqualTo("name", bookName) -// queryBook.findObjects(object : FindListener() { -// override fun done(books: List, e: BmobException?) { -// if (e == null) { -// for (book in books) { -// updateBookRankings(book, isRecommended) -// b_henhao.setImageResource(R.drawable.recommend2) -// } -// Toast.makeText(this@BookInformationActivity, "评价成功!", Toast.LENGTH_LONG) -// .show() -// } else { -// Log.e("BookInfo", "Error updating book comment: ${e.message}") -// } -// } -// }) -// } else { -// Toast.makeText(this, "仅能评价一次!", Toast.LENGTH_SHORT).show() -// } -// } - - private fun judgeComment(){ - val query=BmobQuery() - query.addWhereEqualTo("userid",userId) - query.addWhereEqualTo("b_name",bookName) - query.findObjects(object : FindListener() { - override fun done(lists: List, e: BmobException?) { - if (e == null) { - if(lists.isNotEmpty()) { - isCommented=true - val Myperception = lists[0] - if (Myperception.evaluation == 1) - b_henhao.setImageResource(R.drawable.recommend2) - else if (Myperception.evaluation == 2) - b_yiban.setImageResource(R.drawable.normal2) - else if (Myperception.evaluation == 3) - b_buxing.setImageResource(R.drawable.bad2) - } - } else { - Log.d("error", "error") - } - } - }) - } private fun loadBookCover(coverUrl: String) { Glide.with(this) // 传入 Context .load(coverUrl) // 加载图片的 URL diff --git a/app/src/main/java/edu/whut/jianshu/Activity/MyPostActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/MyPostActivity.kt index 6650d55..154ec91 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/MyPostActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/MyPostActivity.kt @@ -44,7 +44,8 @@ class MyPostActivity : AppCompatActivity() { if (e == null) { for (item in list) { if (item.userid == userId) { - perceptionList.add(Perception(item.objectId)) + perceptionList.add(Perception( + item.objectId,item.b_name,item.countOfLike,item.countOfCollect,item.userid,item.perception)) } } adapter.notifyDataSetChanged() diff --git a/app/src/main/java/edu/whut/jianshu/Activity/PerceptionActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/PerceptionActivity.kt index 07b6930..4a88371 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/PerceptionActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/PerceptionActivity.kt @@ -40,7 +40,8 @@ class PerceptionActivity : AppCompatActivity() { if (e == null) { perception_swipeRefresh.isRefreshing = false for (i in list){ - PerceptionList.add(Perception(i.objectId)) + PerceptionList.add(Perception( + i.objectId,i.b_name,i.countOfLike,i.countOfCollect,i.userid,i.perception)) val adapter =PerceptionAdapter(PerceptionList) perception_recyclerView.adapter = adapter } diff --git a/app/src/main/java/edu/whut/jianshu/Activity/Perception_informationActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/Perception_informationActivity.kt index a713da5..63df29d 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/Perception_informationActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/Perception_informationActivity.kt @@ -6,6 +6,7 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Bundle import android.util.Log +import android.view.inputmethod.InputMethodManager import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.StaggeredGridLayoutManager @@ -14,6 +15,8 @@ import cn.bmob.v3.BmobQuery import cn.bmob.v3.exception.BmobException import cn.bmob.v3.listener.FindListener import cn.bmob.v3.listener.SaveListener +import com.bumptech.glide.Glide +import edu.whut.jianshu.Adapter.BookAdapter import edu.whut.jianshu.Adapter.CommentAdapter import edu.whut.jianshu.Data.entity.Book_info_bmob import edu.whut.jianshu.Data.entity.Comment_bmob @@ -27,7 +30,8 @@ import java.net.HttpURLConnection import java.net.URL class Perception_informationActivity:AppCompatActivity() { - private lateinit var perceptionid:String + private lateinit var adapter: CommentAdapter + private lateinit var perceptionId:String private lateinit var bookName:String private val commentlist=ArrayList() lateinit var userId:String @@ -35,38 +39,55 @@ class Perception_informationActivity:AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_perception_infomation) userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() - perceptionid = intent.getStringExtra("PerceptionId").toString() - Log.d("mytest",perceptionid) + perceptionId = intent.getStringExtra("PerceptionId").toString() inits() + adapter = CommentAdapter(commentlist) + comment_recyclerview.adapter = adapter val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数 comment_recyclerview.layoutManager = layoutManager - var adapter = CommentAdapter(commentlist) - comment_recyclerview.adapter = adapter submitComment.setOnClickListener { - val comment= Comment_bmob() - comment.text=yourcomment.text.toString() - comment.perceptionid=perceptionid - comment.comment_personid= userId - comment.save(object : SaveListener() { - override fun done(objectId: String?, e: BmobException?) { - if (e == null) { - Toast.makeText( - this@Perception_informationActivity, - "评论成功!", - Toast.LENGTH_SHORT - ).show() - yourcomment.text=null - } else { - Toast.makeText( - this@Perception_informationActivity, - "评论失败!", - Toast.LENGTH_SHORT - ).show() - } + val commentText = yourcomment.text.toString() + if (commentText.isNotBlank()) { + val comment = Comment_bmob().apply { + text = commentText + perceptionid = perceptionId + comment_personid = userId } - }) + comment.save(object : SaveListener() { + override fun done(objectId: String?, e: BmobException?) { + if (e == null) { + Toast.makeText( + this@Perception_informationActivity, + "评论成功!", + Toast.LENGTH_SHORT + ).show() + yourcomment.text = null + // 隐藏软键盘 + val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(yourcomment.windowToken, 0) + val newComment = Comment(objectId ?: "") + commentlist.add(newComment) + adapter.notifyItemInserted(commentlist.size - 1) + comment_recyclerview.scrollToPosition(commentlist.size - 1) + } else { + Toast.makeText( + this@Perception_informationActivity, + "评论失败!", + Toast.LENGTH_SHORT + ).show() + } + } + }) + } else { + Toast.makeText( + this@Perception_informationActivity, + "评论内容不能为空", + Toast.LENGTH_SHORT + ).show() + } } + inf_bookInf.setOnClickListener{ val intent = Intent(this, BookInformationActivity::class.java) intent.putExtra("Book_name", bookName) @@ -75,125 +96,76 @@ class Perception_informationActivity:AppCompatActivity() { } } private fun inits(){ + //加载随笔 val query = BmobQuery() - query.addWhereEqualTo("objectId",perceptionid) - //加载用户头像 + query.addWhereEqualTo("objectId", perceptionId) query.findObjects(object : FindListener() { - override fun done(p0: MutableList?, p1: BmobException?) { - if (p1 == null) { - if (p0 != null && p0.size > 0) { - for (p in p0) { - //找发布用户 - inf_textView_perception.text=p.perception - postTime.text="发表于 "+p.createdAt - val queryUser = BmobQuery() - queryUser.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - if (p.userid.equals(i.objectId)) { - inf_postPersonName.text=i.nickName -// flag = true //找到 - Log.d("myLog", "find sucessflly") - //加载图片 - object : Thread() { - override fun run() { - try { - val url = URL(i!!.face?.url) - val connection: HttpURLConnection = - url.openConnection() as HttpURLConnection - connection.setRequestMethod("GET") - connection.setConnectTimeout(3000) - val `in`: InputStream = connection.getInputStream() - val bitmap: Bitmap = - BitmapFactory.decodeStream(`in`) - inf_user_icon.setImageBitmap(bitmap) - } catch (e: Exception) { - e.printStackTrace() - } - } - }.start() + override fun done(perceptionList: MutableList?, perceptionException: BmobException?) { + if (perceptionException == null && perceptionList != null && perceptionList.isNotEmpty()) { + val perception = perceptionList.first() + inf_textView_perception.text = perception.perception + postTime.text = "发表于 " + perception.createdAt - - } - } - } else { - Log.d("myLog", "error") - } - } - }) + // 查找发布用户 + val queryUser = BmobQuery() + queryUser.addWhereEqualTo("objectId", perception.userid) + queryUser.findObjects(object : FindListener() { + override fun done(userList: List, userException: BmobException?) { + if (userException == null && userList.isNotEmpty()) { + val user = userList.first() + inf_postPersonName.text = user.nickName + // 使用 Glide 加载图片 + Glide.with(inf_user_icon.context) + .load(user.face?.url) + .placeholder(R.drawable.pre_load) // 占位符图片 + .error(R.drawable.pre_load) // 错误图片 + .into(inf_user_icon) + } else { + Log.d("myLog", "User query error: ${userException?.message}") + } } - } + }) + // 查找书籍信息 + val queryBook = BmobQuery() + queryBook.addWhereEqualTo("name", perception.b_name) + queryBook.findObjects(object : FindListener() { + override fun done(bookList: List, bookException: BmobException?) { + if (bookException == null && bookList.isNotEmpty()) { + val book = bookList.first() + inf_bookAuthor.text = book.author_name + // 使用 Glide 加载书籍封面图片 + Glide.with(inf_book_pic.context) + .load(book.picture?.url) + .placeholder(R.drawable.pre_load) // 占位符图片 + .error(R.drawable.pre_load) // 错误图片 + .into(inf_book_pic) + } else { + Log.d("myLog", "Book query error: ${bookException?.message}") + } + } + }) + } else { + Log.d("myLog", "Perception query error: ${perceptionException?.message}") } } }) - //加载书籍封面 - query.findObjects(object : FindListener() { - override fun done(p0: MutableList?, p1: BmobException?) { - if (p1 == null) { - if (p0 != null && p0.size > 0) { - for (p in p0) { - Log.d("myLog", p.b_name) - bookName = p.b_name - inf_bookName.text = bookName - val queryBook = BmobQuery() - queryBook.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - if (p.b_name.equals(i.name)) { - inf_bookAuthor.text = - i.author_name - //加载图片 - object : Thread() { - override fun run() { - try { - val url = URL(i!!.picture?.url) - val connection: HttpURLConnection = - url.openConnection() as HttpURLConnection - connection.setRequestMethod("GET") - connection.setConnectTimeout(3000) - val `in`: InputStream = - connection.getInputStream() - val bitmap: Bitmap = - BitmapFactory.decodeStream(`in`) - inf_book_pic.setImageBitmap( - bitmap - ) - } catch (e: Exception) { - e.printStackTrace() - } - } - }.start() - - - } - } - } else { - Log.d("myLog", "error") - } - } - }) - } + // 加载评论 + commentlist.clear() + val bmobQuery = BmobQuery() + bmobQuery.addWhereEqualTo("perceptionid", perceptionId) + bmobQuery.findObjects(object : FindListener() { + override fun done(list: List?, e: BmobException?) { + if (e == null && list != null) { + for (comment in list) { + commentlist.add(Comment(comment.objectId)) } + comment_cnt.text = "评论 ${commentlist.size}" + adapter.notifyDataSetChanged() + } else { + Log.d("myLog", "Error retrieving comments: ${e?.message}") } } }) - val bmobquery=BmobQuery() - bmobquery.addWhereEqualTo("perceptionid",perceptionid) - bmobquery.findObjects(object:FindListener(){ - override fun done(list:List,e:BmobException?){ - if(e==null){ - var cnt=0 - for(i in list){ - cnt++ - commentlist.add(Comment(i.objectId)) - val adapter = CommentAdapter(commentlist) - comment_recyclerview.adapter = adapter - } - comment_cnt.text="评论 "+cnt.toString() - } - } - }) + } } \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Activity/ReAddressActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/ReAddressActivity.kt index b8140b6..ac3c902 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/ReAddressActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/ReAddressActivity.kt @@ -14,13 +14,15 @@ import cn.bmob.v3.listener.UpdateListener import edu.whut.jianshu.Data.entity.User_bmob import edu.whut.jianshu.R import kotlinx.android.synthetic.main.activity_editinfo.* + class ReAddressActivity : AppCompatActivity() { - lateinit var userId:String + lateinit var userId: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_editinfo) - userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() - t_title.text="修改地址" + userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "") + .toString() + t_title.text = "修改地址" val extra_address = intent.getStringExtra("extra_address") et_item.setHint(extra_address) back2my.setOnClickListener() { @@ -42,29 +44,25 @@ class ReAddressActivity : AppCompatActivity() { for (i in list) { if (user_account.equals(i.account)) { flag = true //找到 - Log.d("myLog", "find sucessflly") - //-------更新数据库中的sex - i.setaddress(curAddress) - i.update(i.objectId, object : UpdateListener() { - override fun done(p0: BmobException?) { - if (p0 == null) { - Toast.makeText( - this@ReAddressActivity, - "地址修改成功!", - Toast.LENGTH_SHORT - ).show() - //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新 - startActivity(intent) -// startActivityForResult(intent,1) - finish() + i.setaddress(curAddress) + i.update(i.objectId, object : UpdateListener() { + override fun done(p0: BmobException?) { + if (p0 == null) { + Toast.makeText( + this@ReAddressActivity, + "地址修改成功!", + Toast.LENGTH_SHORT + ).show() + //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新 + startActivity(intent) + finish() - } else { - Log.d("myLog", "can't modify name") - } + } else { + Log.d("myLog", "can't modify name") } - }) - } - else{ + } + }) + } else { Toast.makeText( this@ReAddressActivity, "请输入自己的账号!", diff --git a/app/src/main/java/edu/whut/jianshu/Activity/SendSpecificActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/SendMarkingActivity.kt similarity index 54% rename from app/src/main/java/edu/whut/jianshu/Activity/SendSpecificActivity.kt rename to app/src/main/java/edu/whut/jianshu/Activity/SendMarkingActivity.kt index 7499143..a586a01 100644 --- a/app/src/main/java/edu/whut/jianshu/Activity/SendSpecificActivity.kt +++ b/app/src/main/java/edu/whut/jianshu/Activity/SendMarkingActivity.kt @@ -8,70 +8,68 @@ import android.view.WindowManager import android.view.inputmethod.InputMethodManager import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import cn.bmob.v3.Bmob import cn.bmob.v3.exception.BmobException import cn.bmob.v3.listener.SaveListener -import edu.whut.jianshu.Data.entity.Perception_bmob +import edu.whut.jianshu.Data.entity.Marking_bmob import edu.whut.jianshu.R -import kotlinx.android.synthetic.main.activity_sendspecific.* +import kotlinx.android.synthetic.main.activity_book_info.* +import kotlinx.android.synthetic.main.activity_sendmarking.* -class SendSpecificActivity: AppCompatActivity() { +class SendMarkingActivity: AppCompatActivity() { lateinit var userId:String lateinit var bookname:String - var comment_rank: Int? = null + var evaluation_grade: Int=0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_sendspecific) - sendspecific_content.requestFocus() + setContentView(R.layout.activity_sendmarking) + sendmarking_content.requestFocus() // 弹出软键盘 val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - imm.showSoftInput(sendspecific_content, InputMethodManager.SHOW_IMPLICIT) + imm.showSoftInput(sendmarking_content, InputMethodManager.SHOW_IMPLICIT) // 防止自动弹出软键盘时页面被顶起 window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) - comment_rank = intent.getIntExtra("comment_rank",0) + evaluation_grade = intent.getIntExtra("evaluation_grade",0) bookname = intent.getStringExtra("bookname")?: "" userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() - sendspecific_title.text="点评《"+bookname+"》" + sendmarking_title.text="点评《"+bookname+"》" judgeComment() setClickListeners() } private fun judgeComment(){ - if(comment_rank==1) - sendspecific_henhao.setImageResource(R.drawable.recommend2) - else if(comment_rank==2) - sendspecific_yiban.setImageResource(R.drawable.normal2) - else if(comment_rank==3) - sendspecific_buxing.setImageResource(R.drawable.bad2) + when (evaluation_grade) { + 1 -> sendmarking_henhao.setImageResource(R.drawable.recommend2) + 2 -> sendmarking_yiban.setImageResource(R.drawable.normal2) + 3 -> sendmarking_buxing.setImageResource(R.drawable.bad2) + } } private fun setClickListeners(){ - sendspecific_cancel.setOnClickListener { + sendmarking_cancel.setOnClickListener { val intent = Intent(this, BookInformationActivity::class.java) intent.putExtra("Book_name", bookname) startActivity(intent) finish() } - sendspecific_submit.setOnClickListener { - val perception= Perception_bmob() - perception.b_name=bookname - perception.userid=userId - perception.perception=sendspecific_content.text.toString() - perception.evaluation= comment_rank!! - perception.save(object : SaveListener() { + sendmarking_submit.setOnClickListener { + val Marking= Marking_bmob() + Marking.bookname=bookname + Marking.userid=userId + Marking.evaluation=sendmarking_content.text.toString() + Marking.grade=evaluation_grade + Marking.save(object : SaveListener() { override fun done(objectId: String?, e: BmobException?) { if (e == null) { // 保存成功 Toast.makeText( - this@SendSpecificActivity, + this@SendMarkingActivity, "点评成功!", Toast.LENGTH_SHORT ).show() - Log.d("sendspecific", "Perception_bmob saved successfully. objectId: $objectId") - val intent = Intent(this@SendSpecificActivity, BookInformationActivity::class.java) + val intent = Intent(this@SendMarkingActivity, BookInformationActivity::class.java) intent.putExtra("Book_name", bookname) startActivity(intent) + finish() } else { // 保存失败 - Log.e("sendspecific", "Failed to save Perception_bmob: ${e.message}") } } }) diff --git a/app/src/main/java/edu/whut/jianshu/Adapter/CommentAdapter.kt b/app/src/main/java/edu/whut/jianshu/Adapter/CommentAdapter.kt index d521ed1..060ae33 100644 --- a/app/src/main/java/edu/whut/jianshu/Adapter/CommentAdapter.kt +++ b/app/src/main/java/edu/whut/jianshu/Adapter/CommentAdapter.kt @@ -1,7 +1,5 @@ package edu.whut.jianshu.Adapter -import android.graphics.Bitmap -import android.graphics.BitmapFactory import android.util.Log import android.view.LayoutInflater import android.view.View @@ -12,20 +10,20 @@ import androidx.recyclerview.widget.RecyclerView import cn.bmob.v3.BmobQuery import cn.bmob.v3.exception.BmobException import cn.bmob.v3.listener.FindListener +import com.bumptech.glide.Glide import edu.whut.jianshu.Data.entity.Comment_bmob import edu.whut.jianshu.Data.entity.User_bmob import edu.whut.jianshu.Data.vo.Comment import edu.whut.jianshu.R -import java.io.InputStream -import java.net.HttpURLConnection -import java.net.URL -class CommentAdapter(val commentlist: List) : +class CommentAdapter(val commentList: List) : RecyclerView.Adapter() { + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - val user_icon: ImageView = view.findViewById(R.id.inf_comment_user_icon) - val user_name: TextView = view.findViewById(R.id.inf_comment_postPersonName) + val userIcon: ImageView = view.findViewById(R.id.inf_comment_user_icon) + val userName: TextView = view.findViewById(R.id.inf_comment_postPersonName) val content: TextView = view.findViewById(R.id.inf_comment_textView_perception) + val commentTime:TextView=view.findViewById(R.id.inf_comment_commentTime) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { @@ -33,48 +31,40 @@ class CommentAdapter(val commentlist: List) : return ViewHolder(view) } - override fun onBindViewHolder(holder: CommentAdapter.ViewHolder, position: Int) { - val comment = commentlist[position] + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val comment = commentList[position] val query = BmobQuery() query.addWhereEqualTo("objectId", comment.commentid) query.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - holder.content.text = i.text - Log.d("zytt",i.text) - val query2 = BmobQuery() - query2.addWhereEqualTo("objectId",i.comment_personid) - query2.findObjects(object:FindListener(){ - override fun done(list:List,e:BmobException?){ - if(e==null){ - for(j in list){ - holder.user_name.text=j.nickName - object : Thread() { - override fun run() { - try { - val url = URL(j!!.face.url) - val connection: HttpURLConnection = - url.openConnection() as HttpURLConnection - connection.setRequestMethod("GET") - connection.setConnectTimeout(5000) - val `in`: InputStream = connection.getInputStream() - val bitmap: Bitmap = - BitmapFactory.decodeStream(`in`) - holder.user_icon.setImageBitmap(bitmap) - } catch (e: Exception) { - e.printStackTrace() - } - } - }.start() - } - } + override fun done(commentList: List, e: BmobException?) { + if (e == null && commentList.isNotEmpty()) { + val commentBmob = commentList.first() + holder.content.text = commentBmob.text + holder.commentTime.text=" "+commentBmob.createdAt + val queryUser = BmobQuery() + queryUser.addWhereEqualTo("objectId", commentBmob.comment_personid) + queryUser.findObjects(object : FindListener() { + override fun done(userList: List, e: BmobException?) { + if (e == null && userList.isNotEmpty()) { + val user = userList.first() + holder.userName.text = user.nickName + // 使用 Glide 加载用户头像 + Glide.with(holder.userIcon.context) + .load(user.face?.url) + .placeholder(R.drawable.pre_load) // 占位符图片 + .error(R.drawable.pre_load) // 错误图片 + .into(holder.userIcon) + } else { + Log.d("myLog", "User query error: ${e?.message}") } - }) - } + } + }) + } else { + Log.d("myLog", "Comment query error: ${e?.message}") } } }) } - override fun getItemCount() = commentlist.size -} \ No newline at end of file + + override fun getItemCount() = commentList.size +} diff --git a/app/src/main/java/edu/whut/jianshu/Adapter/GoodperceptionAdapter.kt b/app/src/main/java/edu/whut/jianshu/Adapter/GoodperceptionAdapter.kt deleted file mode 100644 index 296a261..0000000 --- a/app/src/main/java/edu/whut/jianshu/Adapter/GoodperceptionAdapter.kt +++ /dev/null @@ -1,70 +0,0 @@ -package edu.whut.jianshu.Adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import cn.bmob.v3.BmobQuery -import cn.bmob.v3.exception.BmobException -import cn.bmob.v3.listener.FindListener -import com.bumptech.glide.Glide -import edu.whut.jianshu.Data.entity.Perception_bmob -import edu.whut.jianshu.Data.entity.User_bmob -import edu.whut.jianshu.Data.vo.Perception -import edu.whut.jianshu.R - - -class GoodperceptionAdapter(val perceptionList: List) : RecyclerView.Adapter() { - - inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - val user_Image: ImageView = view.findViewById(R.id.goodperception_avatar) - val user_name: TextView = view.findViewById(R.id.user_Name) - val perception: TextView = view.findViewById(R.id.goodContent) - val evaluation_state:ImageView=view.findViewById(R.id.evaluation_state) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.goodperception_item, parent, false) - return ViewHolder(view) - } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val perception = perceptionList[position] - // 从 Perception_bmob 表中查找与 perception 对应的数据 - BmobQuery() - .addWhereEqualTo("objectId", perception.perceptionid) - .findObjects(object : FindListener() { - override fun done(perceptionList: MutableList?, exception: BmobException?) { - if (exception == null && perceptionList != null && perceptionList.isNotEmpty()) { - val perceptionData = perceptionList.first() - holder.perception.text = perceptionData.perception - if (perceptionData.evaluation == 1) - holder.evaluation_state.setImageResource(R.drawable.recommend1) - else if (perceptionData.evaluation == 2) - holder.evaluation_state.setImageResource(R.drawable.normal1) - else if (perceptionData.evaluation == 3) - holder.evaluation_state.setImageResource(R.drawable.bad1) - // 从 User_bmob 表中查找与 perceptionData.userid 对应的数据 - BmobQuery() - .addWhereEqualTo("objectId", perceptionData.userid) - .findObjects(object : FindListener() { - override fun done(userList: MutableList?, userException: BmobException?) { - if (userException == null && userList != null && userList.isNotEmpty()) { - val userData = userList.first() - holder.user_name.text = userData.nickName - Glide.with(holder.itemView.context) - .load(userData.face.url) - .placeholder(R.drawable.pre_load) - .error(R.drawable.fail_load) - .into(holder.user_Image) - } - } - }) - } - } - }) - } - override fun getItemCount() =perceptionList.size - -} diff --git a/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt b/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt new file mode 100644 index 0000000..11bd00e --- /dev/null +++ b/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt @@ -0,0 +1,229 @@ +package edu.whut.jianshu.Adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import cn.bmob.v3.BmobQuery +import cn.bmob.v3.exception.BmobException +import cn.bmob.v3.listener.FindListener +import cn.bmob.v3.listener.QueryListener +import cn.bmob.v3.listener.SaveListener +import cn.bmob.v3.listener.UpdateListener +import com.bumptech.glide.Glide +import edu.whut.jianshu.Data.entity.* +import edu.whut.jianshu.Data.vo.Marking +import edu.whut.jianshu.R + + +class MarkingAdapter(val markingList: List) : + RecyclerView.Adapter() { + + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val user_Image: ImageView = view.findViewById(R.id.goodperception_avatar) + val user_name: TextView = view.findViewById(R.id.user_Name) + val evaluation: TextView = view.findViewById(R.id.goodContent) + val marking_likecnt:TextView=view.findViewById(R.id.marking_likecnt) + val marking_collectcnt:TextView=view.findViewById(R.id.marking_collectcnt) + val marking_grade: ImageView = view.findViewById(R.id.marking_grade) + val marking_like:ImageView=view.findViewById(R.id.marking_like) + val marking_collect:ImageView=view.findViewById(R.id.marking_collect) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = + LayoutInflater.from(parent.context).inflate(R.layout.goodperception_item, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val marking = markingList[position] + when (marking.grade) { + 1 -> holder.marking_grade.setImageResource(R.drawable.recommend1) + 2 -> holder.marking_grade.setImageResource(R.drawable.normal1) + 3 -> holder.marking_grade.setImageResource(R.drawable.bad1) + } + holder.evaluation.text=marking.evaluation + holder.marking_collectcnt.text=marking.countOfCollect.toString() + holder.marking_likecnt.text=marking.countOfLike.toString() + BmobQuery() + .addWhereEqualTo("objectId", marking.userid) + .findObjects(object : FindListener() { + override fun done( + userList: MutableList?, + userException: BmobException? + ) { + if (userException == null && userList != null && userList.isNotEmpty()) { + val userData = userList.first() + holder.user_name.text = userData.nickName + Glide.with(holder.itemView.context) + .load(userData.face.url) + .placeholder(R.drawable.pre_load) + .error(R.drawable.fail_load) + .into(holder.user_Image) + } + } + }) + updateIcon( + marking.userid, marking.markingid, + R.drawable.like2, R.drawable.like1 + ) { holder.marking_like.setImageResource(it) } + + updateIcon( + marking.userid, marking.markingid, + R.drawable.collect2, R.drawable.collect1 + ) { holder.marking_collect.setImageResource(it) } + holder.marking_like.setOnClickListener { + handleLikeAction(marking, holder) + } + + holder.marking_collect.setOnClickListener { + handleCollectAction(marking, holder) + } + + } + // 抽取的更新图标方法 + private inline fun updateIcon( + userId: String, articleId: String, + iconActive: Int, iconInactive: Int, + crossinline setIcon: (Int) -> Unit + ) { + BmobQuery() + .addWhereEqualTo("userid", userId) + .addWhereEqualTo("articleid", articleId) + .findObjects(object : FindListener() { + override fun done(resultList: MutableList?, userException: BmobException?) { + if (userException == null && resultList != null && resultList.isNotEmpty()) { + setIcon(iconActive) + } else { + setIcon(iconInactive) + } + } + }) + } + private fun handleLikeAction(marking: Marking, holder: ViewHolder) { + val currentDrawable = holder.marking_like.drawable.constantState + val like1Drawable = ContextCompat.getDrawable(holder.marking_like.context, R.drawable.like1)?.constantState + val like2Drawable = ContextCompat.getDrawable(holder.marking_like.context, R.drawable.like2)?.constantState + + if (currentDrawable == like1Drawable) { + holder.marking_like.setImageResource(R.drawable.like2) + updateLikeStatus(marking, holder, true) + } else if (currentDrawable == like2Drawable) { + holder.marking_like.setImageResource(R.drawable.like1) + updateLikeStatus(marking, holder, false) + } + } + + private fun handleCollectAction(marking: Marking, holder: ViewHolder) { + val currentDrawable = holder.marking_collect.drawable.constantState + val collect1Drawable = ContextCompat.getDrawable(holder.marking_collect.context, R.drawable.collect1)?.constantState + val collect2Drawable = ContextCompat.getDrawable(holder.marking_collect.context, R.drawable.collect2)?.constantState + + if (currentDrawable == collect1Drawable) { + holder.marking_collect.setImageResource(R.drawable.collect2) + updateCollectStatus(marking, holder, true) + } else if (currentDrawable == collect2Drawable) { + holder.marking_collect.setImageResource(R.drawable.collect1) + updateCollectStatus(marking, holder, false) + } + } + + private fun updateLikeStatus(marking: Marking, holder: ViewHolder, isLiked: Boolean) { + if (isLiked) { + val like = Like_bmob().apply { + userid = marking.userid + articleid = marking.markingid + } + like.save(object : SaveListener() { + override fun done(objectId: String?, e: BmobException?) { + if (e == null) updateMarkingLikeCount(marking, holder, true) + } + }) + } else { + val query = BmobQuery() + query.addWhereEqualTo("userid", marking.userid) + query.addWhereEqualTo("articleid", marking.markingid) + query.findObjects(object : FindListener() { + override fun done(items: MutableList?, e: BmobException?) { + if (e == null && items != null && items.isNotEmpty()) { + items.first().delete(object : UpdateListener() { + override fun done(ex: BmobException?) { + if (ex == null) updateMarkingLikeCount(marking, holder, false) + } + }) + } + } + }) + } + } + + private fun updateCollectStatus(marking: Marking, holder: ViewHolder, isCollected: Boolean) { + if (isCollected) { + val collect = Collect_bmob().apply { + userid = marking.userid + articleid = marking.markingid + } + collect.save(object : SaveListener() { + override fun done(objectId: String?, e: BmobException?) { + if (e == null) updateMarkingCollectCount(marking, holder, true) + } + }) + } else { + val query = BmobQuery() + query.addWhereEqualTo("userid", marking.userid) + query.addWhereEqualTo("articleid", marking.markingid) + query.findObjects(object : FindListener() { + override fun done(items: MutableList?, e: BmobException?) { + if (e == null && items != null && items.isNotEmpty()) { + items.first().delete(object : UpdateListener() { + override fun done(ex: BmobException?) { + if (ex == null) updateMarkingCollectCount(marking, holder, false) + } + }) + } + } + }) + } + } + + private fun updateMarkingLikeCount(marking: Marking, holder: ViewHolder, increment: Boolean) { + val bmobQuery = BmobQuery() + bmobQuery.getObject(marking.markingid, object : QueryListener() { + override fun done(theMarking: Marking_bmob?, ex: BmobException?) { + if (ex == null && theMarking != null) { + theMarking.countOfLike = if (increment) theMarking.countOfLike + 1 else theMarking.countOfLike - 1 + holder.marking_likecnt.text = theMarking.countOfLike.toString() + theMarking.update(marking.markingid, object : UpdateListener() { + override fun done(p0: BmobException?) { + // 处理更新结果 + } + }) + } + } + }) + } + + private fun updateMarkingCollectCount(marking: Marking, holder: ViewHolder, increment: Boolean) { + val bmobQuery = BmobQuery() + bmobQuery.getObject(marking.markingid, object : QueryListener() { + override fun done(theMarking: Marking_bmob?, ex: BmobException?) { + if (ex == null && theMarking != null) { + theMarking.countOfCollect = if (increment) theMarking.countOfCollect + 1 else theMarking.countOfCollect - 1 + holder.marking_collectcnt.text = theMarking.countOfCollect.toString() + theMarking.update(marking.markingid, object : UpdateListener() { + override fun done(p0: BmobException?) { + // 处理更新结果 + } + }) + } + } + }) + } + + override fun getItemCount() = markingList.size + +} diff --git a/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt b/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt index c30ea89..6885e4d 100644 --- a/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt +++ b/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt @@ -12,12 +12,14 @@ import androidx.recyclerview.widget.RecyclerView import cn.bmob.v3.BmobQuery import cn.bmob.v3.exception.BmobException import cn.bmob.v3.listener.FindListener +import cn.bmob.v3.listener.QueryListener +import cn.bmob.v3.listener.SaveListener +import cn.bmob.v3.listener.UpdateListener import com.bumptech.glide.Glide import edu.whut.jianshu.Activity.BookInformationActivity import edu.whut.jianshu.Activity.Perception_informationActivity -import edu.whut.jianshu.Data.entity.Book_info_bmob -import edu.whut.jianshu.Data.entity.Perception_bmob -import edu.whut.jianshu.Data.entity.User_bmob +import edu.whut.jianshu.Data.entity.* +import edu.whut.jianshu.Data.vo.Marking import edu.whut.jianshu.Data.vo.Perception import edu.whut.jianshu.R @@ -26,18 +28,22 @@ class PerceptionAdapter(val perceptionList: List) : RecyclerView.Adapter() { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - val perception_perception: TextView = view.findViewById(R.id.perception_content) + //随笔相关 + val perception_content: TextView = view.findViewById(R.id.perception_content) + val perception_likecnt:TextView=view.findViewById(R.id.perception_likecnt) + val perception_collectcnt:TextView=view.findViewById(R.id.perception_collectcnt) + val perception_like:ImageView=view.findViewById(R.id.perception_likeicon) + val perception_collect:ImageView=view.findViewById(R.id.perception_collecticon) //用户头像 val perception_userIcon: ImageView = view.findViewById(R.id.perception_avatar) - val perception_posetPerson: TextView = view.findViewById(R.id.perception_username) + val perception_username: TextView = view.findViewById(R.id.perception_username) //书籍封面 val perception_bookPic: ImageView = view.findViewById(R.id.perception_bookpic) val perception_bookName: TextView = view.findViewById(R.id.perception_bookName) val perception_bookAuthor: TextView = view.findViewById(R.id.perception_bookAuthor) val perception_bookInf: View = view.findViewById(R.id.perception_bookInf) - lateinit var perceptionid: String } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { @@ -47,78 +53,212 @@ class PerceptionAdapter(val perceptionList: List) : } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - var bookName: String = "" val perception = perceptionList[position] - //设置text - holder.perceptionid = perception.perceptionid - val query = BmobQuery() - query.addWhereEqualTo("objectId", perception.perceptionid) - //加载用户头像 - query.findObjects(object : FindListener() { - override fun done(p0: MutableList?, p1: BmobException?) { - if (p1 == null) { - if (p0 != null && p0.size > 0) { - for (p in p0) { - bookName = p.b_name - //找发布用户 - holder.perception_perception.text = p.perception - val queryUser = BmobQuery() - queryUser.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - if (p.userid.equals(i.objectId)) { - holder.perception_posetPerson.text = i.nickName - //加载图片 - Glide.with(holder.itemView.context) - .load(i.face.url) // 确保你的Book对象有正确的图片URL - .placeholder(R.drawable.pre_load) // 可以设置一个占位图 - .error(R.drawable.fail_load) // 设置加载失败的图 - .into(holder.perception_userIcon) - } - } - } else { - Log.d("perception", "error") - } - } - }) - val queryBook = BmobQuery() - queryBook.addWhereEqualTo("name", bookName) - queryBook.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - holder.perception_bookName.text=bookName - holder.perception_bookAuthor.text=i.author_name - Glide.with(holder.itemView.context) - .load(i.picture.url) // 确保你的Book对象有正确的图片URL - .placeholder(R.drawable.pre_load) // 可以设置一个占位图 - .error(R.drawable.fail_load) // 设置加载失败的图 - .into(holder.perception_bookPic) - } - } else { - Log.d("myLog", "error") - } - } - }) - } + holder.perception_content.text=perception.perception + holder.perception_collectcnt.text=perception.countOfCollect.toString() + holder.perception_likecnt.text=perception.countOfLike.toString() + BmobQuery() + .addWhereEqualTo("objectId", perception.userid) + .findObjects(object : FindListener() { + override fun done( + userList: MutableList?, + userException: BmobException? + ) { + if (userException == null && userList != null && userList.isNotEmpty()) { + val userData = userList.first() + holder.perception_username.text = userData.nickName + Glide.with(holder.itemView.context) + .load(userData.face.url) + .placeholder(R.drawable.pre_load) + .error(R.drawable.fail_load) + .into(holder.perception_userIcon) } } + }) + val queryBook = BmobQuery() + queryBook.addWhereEqualTo("name", perception.bookname) + queryBook.findObjects(object : FindListener() { + override fun done(list: List, e: BmobException?) { + if (e == null) { + for (i in list) { + holder.perception_bookName.text = perception.bookname + holder.perception_bookAuthor.text = i.author_name + Glide.with(holder.itemView.context) + .load(i.picture.url) // 确保你的Book对象有正确的图片URL + .placeholder(R.drawable.pre_load) // 可以设置一个占位图 + .error(R.drawable.fail_load) // 设置加载失败的图 + .into(holder.perception_bookPic) + } + } else { + Log.d("myLog", "error") + } } }) + updateIcon( + perception.userid, perception.perceptionid, + R.drawable.like2, R.drawable.like1 + ) { holder.perception_like.setImageResource(it) } + + updateIcon( + perception.userid, perception.perceptionid, + R.drawable.collect2, R.drawable.collect1 + ) { holder.perception_collect.setImageResource(it) } + holder.perception_like.setOnClickListener { + handleLikeAction(perception, holder) + } + + holder.perception_collect.setOnClickListener { + handleCollectAction(perception, holder) + } holder.perception_bookInf.setOnClickListener() { val intent = Intent(holder.itemView.context, BookInformationActivity::class.java) - intent.putExtra("Book_name", bookName) + intent.putExtra("Book_name", perception.bookname) ContextCompat.startActivity(holder.itemView.context, intent, null) } - holder.perception_perception.setOnClickListener { + holder.perception_content.setOnClickListener { val intent = Intent(holder.itemView.context, Perception_informationActivity::class.java) - intent.putExtra("PerceptionId", holder.perceptionid) + intent.putExtra("PerceptionId", perception.perceptionid) ContextCompat.startActivity(holder.itemView.context, intent, null) } - //给评论图标设置点击事件 - //给评论图标设置点击事件 -// holder.comment.setOnClickListener(View.OnClickListener { showPopupcomment() }) + + } + // 抽取的更新图标方法 + private inline fun updateIcon( + userId: String, articleId: String, + iconActive: Int, iconInactive: Int, + crossinline setIcon: (Int) -> Unit + ) { + BmobQuery() + .addWhereEqualTo("userid", userId) + .addWhereEqualTo("articleid", articleId) + .findObjects(object : FindListener() { + override fun done(resultList: MutableList?, userException: BmobException?) { + if (userException == null && resultList != null && resultList.isNotEmpty()) { + setIcon(iconActive) + } else { + setIcon(iconInactive) + } + } + }) + } + private fun handleLikeAction(perception: Perception, holder: PerceptionAdapter.ViewHolder) { + val currentDrawable = holder.perception_like.drawable.constantState + val like1Drawable = ContextCompat.getDrawable(holder.perception_like.context, R.drawable.like1)?.constantState + val like2Drawable = ContextCompat.getDrawable(holder.perception_like.context, R.drawable.like2)?.constantState + + if (currentDrawable == like1Drawable) { + holder.perception_like.setImageResource(R.drawable.like2) + updateLikeStatus(perception, holder, true) + } else if (currentDrawable == like2Drawable) { + holder.perception_like.setImageResource(R.drawable.like1) + updateLikeStatus(perception, holder, false) + } + } + + private fun handleCollectAction(perception: Perception, holder: PerceptionAdapter.ViewHolder) { + val currentDrawable = holder.perception_collect.drawable.constantState + val collect1Drawable = ContextCompat.getDrawable(holder.perception_collect.context, R.drawable.collect1)?.constantState + val collect2Drawable = ContextCompat.getDrawable(holder.perception_collect.context, R.drawable.collect2)?.constantState + + if (currentDrawable == collect1Drawable) { + holder.perception_collect.setImageResource(R.drawable.collect2) + updateCollectStatus(perception, holder, true) + } else if (currentDrawable == collect2Drawable) { + holder.perception_collect.setImageResource(R.drawable.collect1) + updateCollectStatus(perception, holder, false) + } + } + + private fun updateLikeStatus(perception: Perception, holder: PerceptionAdapter.ViewHolder, isLiked: Boolean) { + if (isLiked) { + val like = Like_bmob().apply { + userid = perception.userid + articleid = perception.perceptionid + } + like.save(object : SaveListener() { + override fun done(objectId: String?, e: BmobException?) { + if (e == null) updatePerceptionLikeCount(perception, holder, true) + } + }) + } else { + val query = BmobQuery() + query.addWhereEqualTo("userid", perception.userid) + query.addWhereEqualTo("articleid", perception.perceptionid) + query.findObjects(object : FindListener() { + override fun done(items: MutableList?, e: BmobException?) { + if (e == null && items != null && items.isNotEmpty()) { + items.first().delete(object : UpdateListener() { + override fun done(ex: BmobException?) { + if (ex == null) updatePerceptionLikeCount(perception, holder, false) + } + }) + } + } + }) + } + } + + private fun updateCollectStatus(perception: Perception, holder: PerceptionAdapter.ViewHolder, isCollected: Boolean) { + if (isCollected) { + val collect = Collect_bmob().apply { + userid = perception.userid + articleid = perception.perceptionid + } + collect.save(object : SaveListener() { + override fun done(objectId: String?, e: BmobException?) { + if (e == null) updatePerceptionCollectCount(perception, holder, true) + } + }) + } else { + val query = BmobQuery() + query.addWhereEqualTo("userid", perception.userid) + query.addWhereEqualTo("articleid", perception.perceptionid) + query.findObjects(object : FindListener() { + override fun done(items: MutableList?, e: BmobException?) { + if (e == null && items != null && items.isNotEmpty()) { + items.first().delete(object : UpdateListener() { + override fun done(ex: BmobException?) { + if (ex == null) updatePerceptionCollectCount(perception, holder, false) + } + }) + } + } + }) + } + } + + private fun updatePerceptionLikeCount(perception: Perception, holder: PerceptionAdapter.ViewHolder, increment: Boolean) { + val bmobQuery = BmobQuery() + bmobQuery.getObject(perception.perceptionid, object : QueryListener() { + override fun done(thePerception: Perception_bmob?, ex: BmobException?) { + if (ex == null && thePerception != null) { + thePerception.countOfLike = if (increment) thePerception.countOfLike + 1 else thePerception.countOfLike - 1 + holder.perception_likecnt.text = thePerception.countOfLike.toString() + thePerception.update(perception.perceptionid, object : UpdateListener() { + override fun done(p0: BmobException?) { + // 处理更新结果 + } + }) + } + } + }) + } + + private fun updatePerceptionCollectCount(perception: Perception, holder: PerceptionAdapter.ViewHolder, increment: Boolean) { + val bmobQuery = BmobQuery() + bmobQuery.getObject(perception.perceptionid, object : QueryListener() { + override fun done(thePerception: Perception_bmob?, ex: BmobException?) { + if (ex == null && thePerception != null) { + thePerception.countOfCollect = if (increment) thePerception.countOfCollect + 1 else thePerception.countOfCollect - 1 + holder.perception_collectcnt.text = thePerception.countOfCollect.toString() + thePerception.update(perception.perceptionid, object : UpdateListener() { + override fun done(p0: BmobException?) { + // 处理更新结果 + } + }) + } + } + }) } override fun getItemCount() = perceptionList.size diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/Book_inf_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/Book_inf_bmob.kt index dd1d2b9..2edb129 100644 --- a/app/src/main/java/edu/whut/jianshu/Data/entity/Book_inf_bmob.kt +++ b/app/src/main/java/edu/whut/jianshu/Data/entity/Book_inf_bmob.kt @@ -12,14 +12,4 @@ class Book_info_bmob:BmobObject(){ var tuijian:Int=0 var buxing:Int=0 var countOfReaders:Int=0 - fun settuijian(tuijian1: Int){ - this.tuijian=tuijian1 - } - fun setyiban(yiban1: Int){ - this.yiban=yiban1 - } - fun setbuxing(buxing1: Int){ - this.buxing=buxing1 - } - } \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/Collect_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/Collect_bmob.kt new file mode 100644 index 0000000..1573c3d --- /dev/null +++ b/app/src/main/java/edu/whut/jianshu/Data/entity/Collect_bmob.kt @@ -0,0 +1,8 @@ +package edu.whut.jianshu.Data.entity + +import cn.bmob.v3.BmobObject + +class Collect_bmob:BmobObject() { + var userid:String="" + var articleid:String="" +} \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/Like_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/Like_bmob.kt new file mode 100644 index 0000000..4c899f0 --- /dev/null +++ b/app/src/main/java/edu/whut/jianshu/Data/entity/Like_bmob.kt @@ -0,0 +1,8 @@ +package edu.whut.jianshu.Data.entity + +import cn.bmob.v3.BmobObject + +class Like_bmob:BmobObject() { + var userid:String="" + var articleid:String="" +} \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/Marking_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/Marking_bmob.kt new file mode 100644 index 0000000..77b3827 --- /dev/null +++ b/app/src/main/java/edu/whut/jianshu/Data/entity/Marking_bmob.kt @@ -0,0 +1,12 @@ +package edu.whut.jianshu.Data.entity + +import cn.bmob.v3.BmobObject + +class Marking_bmob:BmobObject() { + var evaluation: String = "" + var bookname: String = "" + var userid: String = "" + var grade:Int=0 //1->推荐 2->一般 3->不行 + var countOfLike:Int=0 + var countOfCollect:Int=0 +} \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/Perception_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/Perception_bmob.kt index f70043a..5188831 100644 --- a/app/src/main/java/edu/whut/jianshu/Data/entity/Perception_bmob.kt +++ b/app/src/main/java/edu/whut/jianshu/Data/entity/Perception_bmob.kt @@ -4,7 +4,8 @@ import cn.bmob.v3.BmobObject class Perception_bmob:BmobObject() { var perception: String = "" var b_name: String = "" - var post_person: String = "" var userid: String = "" - var evaluation:Int=0 + var countOfLike:Int=0 + var countOfCollect:Int=0 + var countOfComment:Int=0 } \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/vo/Marking.kt b/app/src/main/java/edu/whut/jianshu/Data/vo/Marking.kt new file mode 100644 index 0000000..f3f5c10 --- /dev/null +++ b/app/src/main/java/edu/whut/jianshu/Data/vo/Marking.kt @@ -0,0 +1,10 @@ +package edu.whut.jianshu.Data.vo + +class Marking ( + var markingid:String, + var countOfLike:Int, + var countOfCollect:Int, + var userid:String, + var grade:Int, + var evaluation:String +) \ No newline at end of file diff --git a/app/src/main/java/edu/whut/jianshu/Data/vo/Perception.kt b/app/src/main/java/edu/whut/jianshu/Data/vo/Perception.kt index 1ea905b..9bf8641 100644 --- a/app/src/main/java/edu/whut/jianshu/Data/vo/Perception.kt +++ b/app/src/main/java/edu/whut/jianshu/Data/vo/Perception.kt @@ -1,3 +1,10 @@ package edu.whut.jianshu.Data.vo -class Perception(val perceptionid:String) \ No newline at end of file +class Perception( + var perceptionid:String, + var bookname:String, + var countOfLike:Int, + var countOfCollect:Int, + var userid:String, + var perception:String + ) \ No newline at end of file diff --git a/app/src/main/res/drawable/collect1.png b/app/src/main/res/drawable/collect1.png new file mode 100644 index 0000000000000000000000000000000000000000..01011fed86611ea1a9b8c514cff2f9143d4528e2 GIT binary patch literal 848 zcmV-W1F!svP)Px&3Q0skRA@u(Sqn}aF$@hSDcqz!Ny|x~Cn-IN=}Bl$0{d1m@_0NGd*cDEL?pD@ zPbPl$v;7=y+Lf=HE4ROW0r>0)9vT5={@Gglhd(01Yxz0^KsWrivG$&bo~jX)17POc z*4oR4p?B4hI0C@K$@s?(KxhL{SdT>Xt1=3u037e%wbo!fE2B%JPz_+=eIf#Y#>}9U zM4>bnssU(2-|5248rU-tQ5B8K02un9Y@WR@%S54!MwI}xmsiQk%qXkq3s_G?bYBsL z5&&NE+H%Rv-;YS;mWq!ja#UfiP5z zl~-~0DtQM{c;9Cl-&sHP&;IUdDHi}U!=vDAcEO|1dz-pbKsgJ3bQZe%9~-e108_I^ z50&pB((v$I<5fw8a|A>N$SQ9<0J<5$APMJx73OnzXZfoDX)NeRa* z@CLjxB?C+u1!Z*e92$@PAprQH)8NYJoX@Dc@Ns!%GgvH;TjN7P3BV&=vo3qUK?P5yUY|LBbgC3m;+&E!ECK$QQ3iEdMd zoc6sc%7y2UO96N{Z=Qnn(!dpGCXvI{Ed#*ie~*mSF)$pok*jpsZ2Tw29Xxh!BXGqCFcLxR4>z<+0f;uYUL79nC|ik^4DhMBBLl#jl7!>CLx&?D zM)^{o0~?Y$3&2Ntdh494 akH8x|(6B&0SRMWV0000Px%l1W5CRA@u(naxtdFc8N#g^M%gXdO@DO*_7W@Fwsiz>~k{fq0jP&TgZ@5U5hhHpB~ z0s#7*O>%1r!Wcjt-7f&hAoDC;y58%st(TkrX9R$I|Gl*E*!6=~Nf_tOw@`iuhXhpXQ5pjVyE53&xoF zl!CYz3ntSI3kt-MZ#3b{Cu%B6pcH6RI;t3vAA>D5j}8C;P~AHefZ+fZLYzDR>Lfxb zQ0)0*cem3Wx + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml index eeecdea..cb05006 100644 --- a/app/src/main/res/layout/activity_book_info.xml +++ b/app/src/main/res/layout/activity_book_info.xml @@ -7,7 +7,9 @@ + android:layout_height="0dp" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/bookinfo_bottom"> @@ -206,7 +208,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" - android:text="精彩随笔" + android:text="精彩点评" android:textSize="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/Book_name_View" /> diff --git a/app/src/main/res/layout/activity_my.xml b/app/src/main/res/layout/activity_my.xml index 58f2feb..69f6d68 100644 --- a/app/src/main/res/layout/activity_my.xml +++ b/app/src/main/res/layout/activity_my.xml @@ -182,7 +182,7 @@ android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="12dp" - android:src="@drawable/collect" /> + android:src="@drawable/collect1" /> + android:text="百利甜斤鱼子" /> @@ -97,8 +97,7 @@ android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="钱钟书" - android:textColor="@color/black" - android:textSize="15sp" /> + android:textSize="16sp" /> + android:textSize="16sp" /> @@ -135,7 +133,7 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="发表于 " - android:textColor="@color/black" /> + android:textColor="#808080" /> - + sendmarking + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="8dp"> + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:text="百利甜斤鱼子" + android:textSize="14sp" + android:gravity="center_vertical" /> + - \ No newline at end of file + android:layout_marginStart="40dp" + android:layout_marginTop="4dp" + android:text="多边形裁剪用于裁剪掉被裁剪多边形(又称为实体多边形,后文用S表示)位于窗口(又称为裁剪多边形,后文用C表示)之外的部分。裁剪的结果多边形是由实体多边形位于裁剪多边形内的边界和裁剪多边形位于实体多边形内的边界组成的。" + android:textSize="14sp" /> + diff --git a/app/src/main/res/layout/goodperception_item.xml b/app/src/main/res/layout/goodperception_item.xml index c21453a..924ff38 100644 --- a/app/src/main/res/layout/goodperception_item.xml +++ b/app/src/main/res/layout/goodperception_item.xml @@ -34,7 +34,7 @@ android:text="张三" /> @@ -69,14 +69,18 @@ android:orientation="horizontal"> @@ -88,15 +92,19 @@ android:gravity="end"> + android:src="@drawable/collect1" /> + android:layout_marginLeft="@dimen/s_dp_5" + android:layout_marginRight="40dp" + android:text="收藏数" /> diff --git a/app/src/main/res/layout/perception_item.xml b/app/src/main/res/layout/perception_item.xml index ee8fee7..cb6edfa 100644 --- a/app/src/main/res/layout/perception_item.xml +++ b/app/src/main/res/layout/perception_item.xml @@ -54,7 +54,7 @@ android:layout_marginRight="20dp" android:layout_marginBottom="10dp" android:orientation="horizontal" - android:background="@drawable/mydimgrey" + android:background="@drawable/color_lightsteelblue" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> @@ -125,12 +125,16 @@ android:orientation="horizontal"> @@ -144,11 +148,15 @@ android:gravity="end">