diff --git a/README.md b/README.md
new file mode 100644
index 0000000..763a411
--- /dev/null
+++ b/README.md
@@ -0,0 +1,26 @@
+## 如何运行本项目?
+
+### 法一(推荐):
+
+### 法二
+
+1. 下载2022版本的android studio(老旧版本可能出现bug)
+
+
+
+2. android studio内置各种安卓模拟机,需要首先打开Device Manager下载,建议下载Pixel 5 API30,下载模拟机可能耗时几分钟
+ 
+ 
+ 
+3. 导入本项目,点击根目录JianShu
+ 
+4. Gradle会自动导入依赖,下载本项目所依赖的文件,若android studio右下角停止加载则说明项目导入成功,第一次加载时间可能比较长
+ 
+ 如果意外中断了,可以在Android Studio中,点击`File > Sync Project with Gradle Files`。
+
+5. 运行项目,第一次运行会在模拟机上安卓该app
+
+ 
+
+6. 出现登录界面则成功
+
\ No newline at end of file
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
new file mode 100644
index 0000000..a881bec
Binary files /dev/null and b/app/release/app-release.apk differ
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
new file mode 100644
index 0000000..7abf561
--- /dev/null
+++ b/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "edu.whut.jianshu",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/src/main/java/edu/whut/jianshu/Activity/MyActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/MyActivity.kt
index 510ae67..8929ab7 100644
--- a/app/src/main/java/edu/whut/jianshu/Activity/MyActivity.kt
+++ b/app/src/main/java/edu/whut/jianshu/Activity/MyActivity.kt
@@ -37,7 +37,7 @@ class MyActivity : AppCompatActivity() {
tUserName.text=p.nickName
tUserSignature.text=p.signature
Glide.with(this@MyActivity) // 传入 Context
- .load(p.face.url) // 加载图片的 URL
+ .load(p.face?.url ?: "https://bmob-cdn-31452.bmobpay.com/2024/04/30/6f0e4b19405153ed80f2f1bdfa10da0b.png") // 加载图片的 URL,如果 face 为 null 使用默认 URL
.placeholder(R.drawable.pre_load) // 设置占位图
.error(R.drawable.fail_load) // 设置加载失败时显示的图片
.into(iv_avatar) // 将图片加载到指定的 ImageView 中
diff --git a/app/src/main/java/edu/whut/jianshu/Activity/RegisterActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/RegisterActivity.kt
index c454228..c1bd214 100644
--- a/app/src/main/java/edu/whut/jianshu/Activity/RegisterActivity.kt
+++ b/app/src/main/java/edu/whut/jianshu/Activity/RegisterActivity.kt
@@ -7,6 +7,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import cn.bmob.v3.Bmob
import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.datatype.BmobFile
import cn.bmob.v3.exception.BmobException
import cn.bmob.v3.listener.FindListener
import cn.bmob.v3.listener.SaveListener
@@ -18,100 +19,112 @@ class RegisterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
- inits()
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")
+ initViews()
}
- private fun inits() {
- image_backtoLogin.setOnClickListener{
- val intent=Intent(this,LoginActivity::class.java)
- startActivity(intent)
+ private fun initViews() {
+ image_backtoLogin.setOnClickListener {
+ startActivity(Intent(this, LoginActivity::class.java))
finish()
}
+
button_check.setOnClickListener {
- var flag: Boolean = false
- val use_account: String = et_reg_account.text.toString()
- Log.d("zhangyu", use_account)
- val bmobQuery = BmobQuery()
-// bmobQuery.addWhereEqualTo("account", use_account)
- bmobQuery.findObjects(object : FindListener() {
- override fun done(list: List, e: BmobException?) {
- if (e == null) {
- for (i in list) {
- if (use_account.equals(i.account)) {
- Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT)
- .show()
- flag=true
- }
- }
- if(flag!=true)
- Toast.makeText(this@RegisterActivity,"可以注册",Toast.LENGTH_SHORT).show()
- }
- }
- })
+ checkAccountAvailability()
}
+
bt_reg_register.setOnClickListener {
- var sex: String = ""
- if (rg_reg_man.isChecked)
- sex = "男"
- else if (rg_reg_woman.isChecked)
- sex = "女"
- else
- sex = "未知"
- val user = User_bmob()
- val use_account: String = et_reg_account.text.toString()
- val use_pwd: String = et_reg_pwd.text.toString()
- val use_agapwd: String = et_reg_agapwd.text.toString()
- val use_name: String = et_reg_name.text.toString()
- val use_mail: String = et_reg_email.text.toString()
- val use_phone: String = et_reg_phone.text.toString()
- val bmobQuery = BmobQuery()
- bmobQuery.findObjects(object : FindListener() {
- override fun done(list: List, e: BmobException?) {
- if (e == null) {
- for (i in list) {
- if (use_account.equals(i.account)) {
- Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT)
- .show()
- }
- }
- }
- }
- })
- if (use_account.isEmpty() || use_pwd.isEmpty() || use_agapwd.isEmpty())
- Toast.makeText(this, "账号或密码不能为空白!", Toast.LENGTH_SHORT).show()
- if (use_mail.isEmpty())
- Toast.makeText(this, "邮箱不能为空白!", Toast.LENGTH_SHORT).show()
- else if (use_agapwd != use_pwd) {
- Toast.makeText(this, "两次密码输入不一致!", Toast.LENGTH_SHORT).show()
- }
- else {
- user.setaccount(use_account)
- user.setpassword(use_pwd)
- user.setemail(use_mail)
- user.setnickName(use_name)
- user.setphone(use_phone)
- user.setsex(sex)
- user.save(object : SaveListener() {
- override fun done(objectId: String?, e: BmobException?) {
- if (e == null) {
- Toast.makeText(
- this@RegisterActivity,
- objectId + "注册成功!",
- Toast.LENGTH_SHORT
- ).show()
- } else {
- Toast.makeText(
- this@RegisterActivity,
- "注册失败!" + e.message,
- Toast.LENGTH_SHORT
- ).show()
- }
- }
- })
- val intent = Intent(this, LoginActivity::class.java)
- startActivity(intent)
- finish()
- }
+ registerUser()
}
}
-}
\ No newline at end of file
+
+ private fun checkAccountAvailability() {
+ val account = et_reg_account.text.toString().trim()
+ if (account.isEmpty()) {
+ Toast.makeText(this, "账号不能为空", Toast.LENGTH_SHORT).show()
+ return
+ }
+
+ val query = BmobQuery()
+ query.addWhereEqualTo("account", account)
+ query.findObjects(object : FindListener() {
+ override fun done(users: List, e: BmobException?) {
+ if (e == null) {
+ if (users.isNotEmpty()) {
+ Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT).show()
+ } else {
+ Toast.makeText(this@RegisterActivity, "可以注册", Toast.LENGTH_SHORT).show()
+ }
+ } else {
+ Toast.makeText(this@RegisterActivity, "检查失败: ${e.message}", Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+
+ private fun registerUser() {
+ val account = et_reg_account.text.toString().trim()
+ val password = et_reg_pwd.text.toString().trim()
+ val confirmPassword = et_reg_agapwd.text.toString().trim()
+ val email = et_reg_email.text.toString().trim()
+ val name = et_reg_name.text.toString().trim()
+ val phone = et_reg_phone.text.toString().trim()
+ val sex = when {
+ rg_reg_man.isChecked -> "男"
+ rg_reg_woman.isChecked -> "女"
+ else -> "未知"
+ }
+
+ if (account.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()) {
+ Toast.makeText(this, "账号或密码不能为空白!", Toast.LENGTH_SHORT).show()
+ return
+ }
+ if (email.isEmpty()) {
+ Toast.makeText(this, "邮箱不能为空白!", Toast.LENGTH_SHORT).show()
+ return
+ }
+ if (password != confirmPassword) {
+ Toast.makeText(this, "两次密码输入不一致!", Toast.LENGTH_SHORT).show()
+ return
+ }
+
+ val query = BmobQuery()
+ query.addWhereEqualTo("account", account)
+ query.findObjects(object : FindListener() {
+ override fun done(users: List, e: BmobException?) {
+ if (e == null) {
+ if (users.isNotEmpty()) {
+ Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT).show()
+ } else {
+ saveUser(account, password, email, name, phone, sex)
+ }
+ } else {
+ Toast.makeText(this@RegisterActivity, "检查失败: ${e.message}", Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+
+ private fun saveUser(account: String, password: String, email: String, name: String, phone: String, sex: String) {
+ val user = User_bmob().apply {
+ setaccount(account)
+ setpassword(password)
+ setemail(email)
+ setnickName(name)
+ setphone(phone)
+ setsex(sex)
+ }
+
+ user.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ Toast.makeText(this@RegisterActivity, "注册成功!", Toast.LENGTH_SHORT).show()
+ startActivity(Intent(this@RegisterActivity, LoginActivity::class.java))
+ finish()
+ } else {
+ Toast.makeText(this@RegisterActivity, "注册失败: ${e.message}", Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+}
diff --git a/app/src/main/java/edu/whut/jianshu/Activity/sendPerceptionActivity.kt b/app/src/main/java/edu/whut/jianshu/Activity/sendPerceptionActivity.kt
index fbc168a..f97c676 100644
--- a/app/src/main/java/edu/whut/jianshu/Activity/sendPerceptionActivity.kt
+++ b/app/src/main/java/edu/whut/jianshu/Activity/sendPerceptionActivity.kt
@@ -107,7 +107,7 @@ class sendPerceptionActivity:AppCompatActivity() {
if (e == null) {
user?.let {
Glide.with(this@sendPerceptionActivity) // 传入 Context
- .load(it.face.url) // 加载图片的 URL
+ .load(it.face?.url ?: "https://bmob-cdn-31452.bmobpay.com/2024/04/30/6f0e4b19405153ed80f2f1bdfa10da0b.png") // 加载图片的 URL
.placeholder(R.drawable.pre_load) // 设置占位图
.error(R.drawable.fail_load) // 设置加载失败时显示的图片
.into(send_avatar) // 将图片加载到指定的 ImageView 中
diff --git a/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt b/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt
index 11bd00e..bc1cf7e 100644
--- a/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt
+++ b/app/src/main/java/edu/whut/jianshu/Adapter/MarkingAdapter.kt
@@ -60,7 +60,7 @@ class MarkingAdapter(val markingList: List) :
val userData = userList.first()
holder.user_name.text = userData.nickName
Glide.with(holder.itemView.context)
- .load(userData.face.url)
+ .load(userData.face?.url ?: "https://bmob-cdn-31452.bmobpay.com/2024/04/30/6f0e4b19405153ed80f2f1bdfa10da0b.png")
.placeholder(R.drawable.pre_load)
.error(R.drawable.fail_load)
.into(holder.user_Image)
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 6885e4d..ce0e079 100644
--- a/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt
+++ b/app/src/main/java/edu/whut/jianshu/Adapter/PerceptionAdapter.kt
@@ -68,7 +68,7 @@ class PerceptionAdapter(val perceptionList: List) :
val userData = userList.first()
holder.perception_username.text = userData.nickName
Glide.with(holder.itemView.context)
- .load(userData.face.url)
+ .load(userData.face?.url ?: "https://bmob-cdn-31452.bmobpay.com/2024/04/30/6f0e4b19405153ed80f2f1bdfa10da0b.png")
.placeholder(R.drawable.pre_load)
.error(R.drawable.fail_load)
.into(holder.perception_userIcon)
diff --git a/app/src/main/java/edu/whut/jianshu/Data/entity/User_bmob.kt b/app/src/main/java/edu/whut/jianshu/Data/entity/User_bmob.kt
index 173771f..fd60327 100644
--- a/app/src/main/java/edu/whut/jianshu/Data/entity/User_bmob.kt
+++ b/app/src/main/java/edu/whut/jianshu/Data/entity/User_bmob.kt
@@ -3,63 +3,86 @@ package edu.whut.jianshu.Data.entity
import cn.bmob.v3.BmobObject
import cn.bmob.v3.datatype.BmobFile
-class User_bmob:BmobObject(){
- var account:String=""
- var signature:String=""
- var nickName:String=""
- var password:String=""
- var email:String=""
- var sex:String=""
- var phone:String=""
- var address:String=""
- var face:BmobFile=BmobFile()
- fun setaccount(account:String){
- this.account=account
+class User_bmob : BmobObject() {
+ var account: String = ""
+ var signature: String = ""
+ var nickName: String = ""
+ var password: String = ""
+ var email: String = ""
+ var sex: String = ""
+ var phone: String = ""
+ var address: String = ""
+ var face: BmobFile? = null
+
+ fun setaccount(account: String) {
+ this.account = account
}
- fun getaccount():String{
+
+ fun getaccount(): String {
return this.account
}
- fun setsignature(signature:String){
- this.signature=signature
+
+ fun setsignature(signature: String) {
+ this.signature = signature
}
- fun getsignature():String{
+
+ fun getsignature(): String {
return this.signature
}
- fun setnickName(nickName:String){
- this.nickName=nickName
+
+ fun setnickName(nickName: String) {
+ this.nickName = nickName
}
- fun getnickName():String{
+
+ fun getnickName(): String {
return this.nickName
}
- fun setpassword(password:String){
- this.password=password
+
+ fun setpassword(password: String) {
+ this.password = password
}
- fun getpassword():String{
+
+ fun getpassword(): String {
return this.password
}
- fun setemail(email:String){
- this.email=email
+
+ fun setemail(email: String) {
+ this.email = email
}
- fun getemail():String{
+
+ fun getemail(): String {
return this.email
}
- fun setsex(sex:String){
- this.sex=sex
+
+ fun setsex(sex: String) {
+ this.sex = sex
}
- fun getsex():String{
+
+ fun getsex(): String {
return this.sex
}
- fun setphone(phone:String){
- this.phone=phone
+
+ fun setphone(phone: String) {
+ this.phone = phone
}
- fun getphone():String{
+
+ fun getphone(): String {
return this.phone
}
- fun setaddress(address:String){
- this.address=address
+
+ fun setaddress(address: String) {
+ this.address = address
}
- fun getaddress():String{
+
+ fun getaddress(): String {
return this.address
}
-}
\ No newline at end of file
+ fun setface(face: BmobFile) {
+ this.face = face
+ }
+
+ fun getface(): BmobFile? {
+ return this.face
+ }
+}
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
index 1b56fd1..45b180f 100644
--- a/app/src/main/res/layout/activity_register.xml
+++ b/app/src/main/res/layout/activity_register.xml
@@ -1,11 +1,7 @@
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
@@ -71,19 +68,20 @@
+ android:src="@drawable/nickname" />
@@ -112,13 +110,13 @@
@@ -126,6 +124,7 @@
android:id="@+id/et_reg_pwd"
android:layout_width="match_parent"
android:layout_height="35dp"
+ android:layout_marginLeft="@dimen/s_dp_5"
android:background="@drawable/edit_bg"
android:hint="输入你的密码"
android:inputType="textPassword" />
@@ -133,12 +132,12 @@
@@ -147,44 +146,47 @@
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginTop="10dp"
+ android:layout_marginLeft="@dimen/s_dp_5"
android:background="@drawable/edit_bg"
android:hint="再次输入你的密码"
android:inputType="textPassword" />
@@ -195,6 +197,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:background="@drawable/edit_bg"
android:text="提交" />
diff --git a/mdfile_pic/50e125560f05d7d05efbd30ab3059d3.png b/mdfile_pic/50e125560f05d7d05efbd30ab3059d3.png
new file mode 100644
index 0000000..213adf4
Binary files /dev/null and b/mdfile_pic/50e125560f05d7d05efbd30ab3059d3.png differ
diff --git a/mdfile_pic/a5d83c0db4d39a9222c9fe7af580e1e.png b/mdfile_pic/a5d83c0db4d39a9222c9fe7af580e1e.png
new file mode 100644
index 0000000..aebda4d
Binary files /dev/null and b/mdfile_pic/a5d83c0db4d39a9222c9fe7af580e1e.png differ
diff --git a/mdfile_pic/屏幕截图 2024-05-22 163356.png b/mdfile_pic/屏幕截图 2024-05-22 163356.png
new file mode 100644
index 0000000..b32c25f
Binary files /dev/null and b/mdfile_pic/屏幕截图 2024-05-22 163356.png differ
diff --git a/mdfile_pic/屏幕截图 2024-05-22 164310.png b/mdfile_pic/屏幕截图 2024-05-22 164310.png
new file mode 100644
index 0000000..39e1925
Binary files /dev/null and b/mdfile_pic/屏幕截图 2024-05-22 164310.png differ
diff --git a/mdfile_pic/屏幕截图 2024-05-22 164348.png b/mdfile_pic/屏幕截图 2024-05-22 164348.png
new file mode 100644
index 0000000..af07ff3
Binary files /dev/null and b/mdfile_pic/屏幕截图 2024-05-22 164348.png differ
diff --git a/mdfile_pic/屏幕截图 2024-05-22 164628.png b/mdfile_pic/屏幕截图 2024-05-22 164628.png
new file mode 100644
index 0000000..bd7de55
Binary files /dev/null and b/mdfile_pic/屏幕截图 2024-05-22 164628.png differ
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index 6cb59a3..0000000
--- a/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-安卓项目是面向用户的,目前数据库设计有点问题,应该“管理员”专门设置一个热门图书表和好评图书表,而不要用户自己来查图片
\ No newline at end of file