From 066dc964214336012cb42d9c69f21e7ef06069ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=B0=8F=E6=B1=9F?= <461355754@qq.com> Date: Wed, 13 Aug 2025 08:52:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1=E5=85=85?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 12 +- .../module_my/chongzhi/ChongZhiActivity.kt | 4 +- .../module_my/edituser/ModifyDataActivity.kt | 176 ++++++++---------- .../module_my/edituser/ModifyDataViewModel.kt | 19 ++ .../homepage/UserHomePageActivity.kt | 78 ++++++-- .../homepage/UserHomePageViewModel.kt | 14 +- .../mier/module_my/money/bi/JinBiFragment.kt | 4 +- .../module_my/vip/ChangeInviterActivity.kt | 4 +- .../yuyin/mier/repository/CommonRepository.kt | 2 +- .../yuyin/mier/wxapi/WXPayEntryActivity.java | 2 +- .../com/yuyin/lib_base/base/BaseViewModel.kt | 8 + .../com/yuyin/lib_base/http/BaseApiService.kt | 6 +- .../com/yuyin/lib_base/http/BaseRepository.kt | 4 +- tmpmob/ShareSDK/assets/ShareSDK.xml | 2 +- tmpmob/assets/ShareSDK.xml | 2 +- 15 files changed, 193 insertions(+), 144 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 43e8b46..2bbb906 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,12 @@ MobSDK { loopShare true devInfo { Wechat { - appId "wx7b5c4e89e726a72c" - appSecret "afc9860f4c670ac19f9efb0ab94927a3" + appId "wx3304802a02ab8d62" + appSecret "fd7a8c53063654d7cf942e9950d2da6b" +// appId "wx7b5c4e89e726a72c" +// appSecret "afc9860f4c670ac19f9efb0ab94927a3" +// appId "wx3858bffeddfb91b8" +// appSecret "0b59b165268b63ba6446d1dc55a21f38" } QQ { appId "102046191" @@ -35,8 +39,8 @@ android { minSdkVersion 22 targetSdkVersion 31 - versionCode 46 - versionName "1.3.6" + versionCode 47 + versionName "1.3.7" dataBinding { //noinspection DataBindingWithoutKapt enabled = true diff --git a/app/src/main/java/com/yuyin/mier/module_my/chongzhi/ChongZhiActivity.kt b/app/src/main/java/com/yuyin/mier/module_my/chongzhi/ChongZhiActivity.kt index 19b5035..634c3a7 100644 --- a/app/src/main/java/com/yuyin/mier/module_my/chongzhi/ChongZhiActivity.kt +++ b/app/src/main/java/com/yuyin/mier/module_my/chongzhi/ChongZhiActivity.kt @@ -47,14 +47,14 @@ class ChongZhiActivity : BaseDataBindingActivity() { val REQUEST_CODE_SELEC2 = 101 private var sexStr: String = "" private var nowDate: String = "" + private var userId: String="" private var maxSelectNum = 9 //最多显示的图片数量 override fun startObserve() { @@ -100,11 +101,13 @@ class ModifyDataActivity : BaseActivity() { } //ID号 id.text = it.uid + userId=it.uid //出生日期 birthday.text = it.birthday imgString = it.head_pic tv_qianming.setText(it.autograph) tv_aihao.setText(it.hobby) + viewModel.loadData(userId) } viewModel.editFinish.observe(this) { @@ -136,8 +139,65 @@ class ModifyDataActivity : BaseActivity() { aihao ) } - } + viewModel.imgListData2.observe(this) { + var imgs = "" + for (str in it) { + imgs = if (imgs.isEmpty()) + str + else + "$imgs,$str" + } + viewModel.add_user_albums(imgs) + } + + viewModel.userData.observe( this){ + if (it.user_albums_list.isNotEmpty()) { + // 清空所有列表数据 + imageListAll1.clear() + imageListAll2.clear() + tempList.clear() + // 添加服务器返回的图片数据 + for (album in it.user_albums_list) { + val imageItem = ImageItem() + imageItem.name=album.aid + imageItem.path = safeUrlDecode(album.image ?: "") // 添加安全解码 + tempList.add(imageItem) + imageListAll1.add(ImageItems(1, imageItem)) + + } + + // 复制数据到imageListAll2 + imageListAll2.addAll(imageListAll1) + + // 添加"添加图片"按钮(如果未达到最大数量) + if (imageListAll2.size < maxSelectNum) { + imageListAll2.add(ImageItems(2, ImageItem())) + } + + adapter.setNewData(imageListAll2) + } + } + + } + // 添加安全的URL解码方法 + private fun safeUrlDecode(encodedString: String): String { + if (encodedString.isEmpty()) return encodedString + + return try { + // 检查是否包含有效的百分号编码 + if (encodedString.contains("%") && encodedString.length > 2) { + java.net.URLDecoder.decode(encodedString, "UTF-8") + } else { + encodedString + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + encodedString + } catch (e: java.io.UnsupportedEncodingException) { + encodedString + } + } override fun getLayoutId(): Int = R.layout.activity_modify_data override fun initView() { @@ -145,7 +205,6 @@ class ModifyDataActivity : BaseActivity() { override fun initData() { - adapter = FBPicListAdapter() val manager = FullyGridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false) sor_release_rv.layoutManager = manager @@ -154,6 +213,7 @@ class ModifyDataActivity : BaseActivity() { adapter.setNewData(imageListAll2) viewModel.loadUserInfo() + } override fun initEvent() { @@ -200,7 +260,6 @@ class ModifyDataActivity : BaseActivity() { "爱好不能为空".showToast() return@setOnClickListener } -// if (tempList.size == 0) { if (selImageList.size == 0) { viewModel.editUserInfo( imgString, @@ -213,9 +272,6 @@ class ModifyDataActivity : BaseActivity() { } else { uploadFile(selImageList[0].path) } -// }else{ -// uploadFile(tempList[0].path) -// } } head_image.setOnClickListener { // showImgPop() @@ -262,12 +318,6 @@ class ModifyDataActivity : BaseActivity() { } adapter.setOnItemClickListener { adapter2, view, position -> -// var mPermissionsChecker = PermissionsChecker(this@ModifyDataActivity) -// if (mPermissionsChecker!!.lacksPermissions(*permissionListTmp)) { -// ll_quanxian.visibility = View.VISIBLE -// } else { -// ll_quanxian.visibility = View.GONE -// } if (adapter.data[position].type == 2) { @@ -282,43 +332,10 @@ class ModifyDataActivity : BaseActivity() { .isOriginalSkipCompress(true) .forResult(REQUEST_CODE_SELEC2) //结果回调onActivityResult code -// var numss = 9 - (adapter.data.size - 1) -// if (numss > 3) numss = 3 -// val rxPermissions = RxPermissions(this) -// val finalNumss = numss -// rxPermissions -// .request( -// Manifest.permission.CAMERA, -// Manifest.permission.WRITE_EXTERNAL_STORAGE, -// Manifest.permission.READ_MEDIA_IMAGES -// ) -// .subscribe { granted: Boolean -> -// if (granted) { // Always true pre-M -// // 跳转到相册 -// ll_quanxian.visibility = View.GONE -// ImagePicker.getInstance().selectLimit = finalNumss -// ImagePicker.getInstance().isMultiMode = true -// ImagePicker.getInstance().isCrop = false -// val intent = Intent(this, ImageGridActivity::class.java) -// //显示选中的图片 -// startActivityForResult(intent, REQUEST_CODE_SELEC2) -// } else { -// ll_quanxian.visibility = View.GONE -// AlertDialog.Builder(this@ModifyDataActivity) -// .setMessage("需要存储权限来访问相册") -// .setPositiveButton("去设置") { dialog, which -> -// val intent: Intent = -// Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) -// val uri = Uri.fromParts("package", packageName, null) -// intent.setData(uri) -// startActivity(intent) -// } -// .setNegativeButton("取消", null) -// .show() -// } -// } } } + + adapter.setOnItemChildClickListener { adapter, view, position -> when (view.id) { R.id.iv_del -> { @@ -332,6 +349,7 @@ class ModifyDataActivity : BaseActivity() { } else { adapter.notifyDataSetChanged() } + } catch (e: Exception) { e.printStackTrace() } @@ -398,16 +416,6 @@ class ModifyDataActivity : BaseActivity() { private fun uploadFile(pic: String) { val parts = ArrayList() val listPos: MutableList = ArrayList() -// if (tempList.size != 0){ -// for (i in tempList.indices) { -// val file = File(tempList[i].path) -// val requestFile = -// RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file) -// val body = MultipartBody.Part.createFormData("file[]", file.name, requestFile) -// parts.add(body) -// listPos.add(i) -// } -// } if (!TextUtils.isEmpty(pic)) { val file2 = File(pic) val requestFile2 = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file2) @@ -542,41 +550,6 @@ class ModifyDataActivity : BaseActivity() { if (data == null) { return } -// val tempList: ArrayList? -// if (resultCode == RESULT_OK && data != null) { -// //添加图片返回 -// if (requestCode == REQUEST_CODE_SELECT) { -//// tempList = -//// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList? -// tempList = PictureSelector.obtainSelectorList(data) as ArrayList? -// if (tempList == null) { -// return -// } -// selImageList.clear() -// selImageList.addAll(tempList) -// if (selImageList.size > 0) { -// Glide.with(this).load(selImageList[0].path).into(head_image) -// } -// } else if (requestCode == REQUEST_CODE_SELEC2) { -// tempList = -// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList? -// if (tempList == null) { -// return -// } -// -// adapter.data.clear() -// for (i in tempList.indices) { -// imageListAll1.add(ImageItems(1, tempList[i])) -// } -// -// imageListAll2 = imageListAll1 -// if (imageListAll2.size < maxSelectNum) { -// imageListAll2.add(ImageItems(2, ImageItem())) -// } -// -// adapter.setNewData(imageListAll2) -// } -// } if (resultCode == RESULT_OK && data != null) { //添加图片返回 if (requestCode == REQUEST_CODE_SELECT) { @@ -601,23 +574,24 @@ class ModifyDataActivity : BaseActivity() { // 处理 ImagePicker 返回的结果 val localMediaList: ArrayList = PictureSelector.obtainSelectorList(data) -// val tempList = data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList? -// if (tempList == null) { -// return -// } - - adapter.data.clear() -// for (i in tempList.indices) { -// imageListAll1.add(ImageItems(1, tempList[i])) -// } tempList.clear() + val parts = java.util.ArrayList() for (localMedia in localMediaList) { val imageItem = ImageItem() imageItem.path = localMedia.realPath tempList.add(imageItem) imageListAll1.add(ImageItems(1, imageItem)) } + for (i in tempList.indices) { + val file = File(tempList[i].path) + val requestFile = + RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file) + val part = MultipartBody.Part.createFormData("file[]", file.name, requestFile) + parts.add(part) + + } + viewModel.uploadImages2(parts) imageListAll2 = imageListAll1 if (imageListAll2.size < maxSelectNum) { diff --git a/app/src/main/java/com/yuyin/mier/module_my/edituser/ModifyDataViewModel.kt b/app/src/main/java/com/yuyin/mier/module_my/edituser/ModifyDataViewModel.kt index 58582d7..ec49a38 100644 --- a/app/src/main/java/com/yuyin/mier/module_my/edituser/ModifyDataViewModel.kt +++ b/app/src/main/java/com/yuyin/mier/module_my/edituser/ModifyDataViewModel.kt @@ -2,8 +2,10 @@ package com.yuyin.mier.module_my.edituser import androidx.lifecycle.MutableLiveData import com.yuyin.lib_base.base.BaseViewModel +import com.yuyin.mier.module_my.model.UserHomePageBean import com.yuyin.mier.module_my.model.UserInfoBean import com.yuyin.mier.repository.CommonRepository +import okhttp3.MultipartBody import java.net.URLEncoder class ModifyDataViewModel : BaseViewModel() { @@ -24,4 +26,21 @@ class ModifyDataViewModel : BaseViewModel() { editFinish.value = data.data } } + var userData = MutableLiveData() + fun loadData(from_id: String) { + launchUI { + val result = repository.player_home_page(from_id) + userData.value = result.data + } + } + + + var imgListData2: MutableLiveData> = MutableLiveData() + + fun uploadImages2(imgFiles: List) { + launchUI { + var result = baseRepository.uploadImages2(imgFiles) + imgListData2.value = result.data + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageActivity.kt b/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageActivity.kt index f797e9a..f396747 100644 --- a/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageActivity.kt +++ b/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageActivity.kt @@ -16,6 +16,9 @@ import com.alibaba.android.arouter.launcher.ARouter import com.blankj.utilcode.util.LogUtils import com.flyco.tablayout.listener.CustomTabEntity import com.flyco.tablayout.listener.OnTabSelectListener +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.style.PictureSelectorStyle import com.lzy.imagepicker.ImagePicker import com.lzy.imagepicker.bean.ImageItem import com.lzy.imagepicker.ui.ImageGridActivity @@ -35,9 +38,11 @@ import com.yuyin.mier.R import com.yuyin.mier.databinding.ActivityUserHomepageBinding import com.yuyin.mier.module_my.adapter.MyPicListAdapter import com.yuyin.mier.module_my.adapter.UserGiftWallAdapter +import com.yuyin.mier.module_my.edituser.ModifyDataActivity.TUIEngine import com.yuyin.mier.module_my.gh.deatile.GongHuiDeatileActivity import com.yuyin.mier.module_my.model.UserAlbumsList import com.yuyin.mier.view.pic.FullScreenUtil2 +import com.yuyin.module_community.model.ImageItems import kotlinx.android.synthetic.main.activity_user_homepage.* import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -382,21 +387,32 @@ class UserHomePageActivity : } else { var numss = 8 - (myPicListAdapter.data.size - 1) if (numss > 3) numss = 3 - val rxPermissions = RxPermissions(this) - val finalNumss = numss - rxPermissions - .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) - .subscribe { granted: Boolean -> - if (granted) { // Always true pre-M - // 跳转到相册 - ImagePicker.getInstance().selectLimit = finalNumss - ImagePicker.getInstance().isMultiMode = true - ImagePicker.getInstance().isCrop = false - val intent = Intent(this, ImageGridActivity::class.java) - //显示选中的图片 - startActivityForResult(intent, REQUEST_CODE_SELECT) - } - } +// val rxPermissions = RxPermissions(this) +// val finalNumss = numss +// rxPermissions +// .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) +// .subscribe { granted: Boolean -> +// if (granted) { // Always true pre-M +// // 跳转到相册 +// ImagePicker.getInstance().selectLimit = finalNumss +// ImagePicker.getInstance().isMultiMode = true +// ImagePicker.getInstance().isCrop = false +// val intent = Intent(this, ImageGridActivity::class.java) +// //显示选中的图片 +// startActivityForResult(intent, REQUEST_CODE_SELECT) +// } +// } + + PictureSelector.create(this) + .openGallery(1) + .setImageEngine(TUIEngine()) + .setSelectorUIStyle(PictureSelectorStyle()) + .isGif(false) + .setMaxSelectNum(numss) + .isPreviewImage(true) + .isDisplayCamera(true) + .isOriginalSkipCompress(true) + .forResult(REQUEST_CODE_SELECT) //结果回调onActivityResult code } } @@ -538,12 +554,34 @@ class UserHomePageActivity : if (data == null) { return } - if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { - //添加图片返回 +// if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { +// //添加图片返回 +// if (requestCode == REQUEST_CODE_SELECT) { +// val tempList = +// data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList? +// ?: return +// val parts = ArrayList() +// for (i in tempList.indices) { +// val file = File(tempList[i].path) +// val requestFile = +// RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file) +// val body = MultipartBody.Part.createFormData("file[]", file.name, requestFile) +// parts.add(body) +// } +// viewModel.uploadImages(parts) +// } +// } + if (resultCode == RESULT_OK && data != null) { if (requestCode == REQUEST_CODE_SELECT) { - val tempList = - data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS) as ArrayList? - ?: return + // 处理 ImagePicker 返回的结果 + val localMediaList: ArrayList = PictureSelector.obtainSelectorList(data) + var tempList: ArrayList = ArrayList() + for (localMedia in localMediaList) { + val imageItem = ImageItem() + imageItem.path = localMedia.realPath + tempList.add(imageItem) + } + val parts = ArrayList() for (i in tempList.indices) { val file = File(tempList[i].path) diff --git a/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageViewModel.kt b/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageViewModel.kt index e15e38e..1a0a5dd 100644 --- a/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageViewModel.kt +++ b/app/src/main/java/com/yuyin/mier/module_my/homepage/UserHomePageViewModel.kt @@ -28,7 +28,7 @@ class UserHomePageViewModel : BaseViewModel() { var cancelFollowData = MutableLiveData() var delImgData = MutableLiveData() - var addImgData = MutableLiveData() +// var addImgData = MutableLiveData() var dynamicList = MutableLiveData>() @@ -86,12 +86,12 @@ class UserHomePageViewModel : BaseViewModel() { } } - fun add_user_albums(imgs: String) { - launchUI { - val result = myRepository.add_user_albums(imgs) - addImgData.value = result.data - } - } +// fun add_user_albums(imgs: String) { +// launchUI { +// val result = myRepository.add_user_albums(imgs) +// addImgData.value = result.data +// } +// } var addBlack = MutableLiveData() fun add_blacklist(userId: String) { diff --git a/app/src/main/java/com/yuyin/mier/module_my/money/bi/JinBiFragment.kt b/app/src/main/java/com/yuyin/mier/module_my/money/bi/JinBiFragment.kt index 48a76ca..42a2ac8 100644 --- a/app/src/main/java/com/yuyin/mier/module_my/money/bi/JinBiFragment.kt +++ b/app/src/main/java/com/yuyin/mier/module_my/money/bi/JinBiFragment.kt @@ -118,7 +118,7 @@ class JinBiFragment : BaseDataBindingFragment = request { + override suspend fun add_user_albums(img: String): ResponseData = request { CommonServer.api.add_user_albums(img) } diff --git a/app/src/main/java/com/yuyin/mier/wxapi/WXPayEntryActivity.java b/app/src/main/java/com/yuyin/mier/wxapi/WXPayEntryActivity.java index fc9dcdf..c3eff17 100644 --- a/app/src/main/java/com/yuyin/mier/wxapi/WXPayEntryActivity.java +++ b/app/src/main/java/com/yuyin/mier/wxapi/WXPayEntryActivity.java @@ -20,7 +20,7 @@ public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - api = WXAPIFactory.createWXAPI(this, "wx7b5c4e89e726a72c", true); + api = WXAPIFactory.createWXAPI(this, "wx3304802a02ab8d62", true); api.handleIntent(getIntent(), this); } diff --git a/lib_base/src/main/java/com/yuyin/lib_base/base/BaseViewModel.kt b/lib_base/src/main/java/com/yuyin/lib_base/base/BaseViewModel.kt index 7f7e0d5..728c474 100644 --- a/lib_base/src/main/java/com/yuyin/lib_base/base/BaseViewModel.kt +++ b/lib_base/src/main/java/com/yuyin/lib_base/base/BaseViewModel.kt @@ -126,6 +126,7 @@ open class BaseViewModel : ViewModel(), LifecycleObserver { } var imgListData: MutableLiveData> = MutableLiveData() + var addImgData = MutableLiveData() fun uploadImages(imgFiles: List) { launchUI { @@ -133,6 +134,12 @@ open class BaseViewModel : ViewModel(), LifecycleObserver { imgListData.value = result.data } } + fun add_user_albums(imgs: String) { + launchUI { + val result = baseRepository.add_user_albums(imgs) + addImgData.value = result.data + } + } //运行在UI线程的协程 fun launchUI(block: suspend CoroutineScope.() -> Unit) = viewModelScope.launch { @@ -205,4 +212,5 @@ open class BaseViewModel : ViewModel(), LifecycleObserver { captchaBean.value = result.data } } + } \ No newline at end of file diff --git a/lib_base/src/main/java/com/yuyin/lib_base/http/BaseApiService.kt b/lib_base/src/main/java/com/yuyin/lib_base/http/BaseApiService.kt index 9e3da88..4d1f56e 100644 --- a/lib_base/src/main/java/com/yuyin/lib_base/http/BaseApiService.kt +++ b/lib_base/src/main/java/com/yuyin/lib_base/http/BaseApiService.kt @@ -195,7 +195,11 @@ interface BaseApiService { */ @GET("api/calculator") suspend fun calculator(): ResponseData - + /** + * 上传用户相册* + */ + @GET("user/add_user_albums") + suspend fun add_user_albums(@Query("image") image: String): ResponseData /** * 获取提现详情 diff --git a/lib_base/src/main/java/com/yuyin/lib_base/http/BaseRepository.kt b/lib_base/src/main/java/com/yuyin/lib_base/http/BaseRepository.kt index 13bdd98..1f9d0ba 100644 --- a/lib_base/src/main/java/com/yuyin/lib_base/http/BaseRepository.kt +++ b/lib_base/src/main/java/com/yuyin/lib_base/http/BaseRepository.kt @@ -49,7 +49,9 @@ open class BaseRepository { request { BaseApiServer.api.uploadImages2(imgFiles) } - + open suspend fun add_user_albums(img: String): ResponseData = request { + BaseApiServer.api.add_user_albums(img) + } suspend fun getUserinfo(): ResponseData = request { BaseApiServer.api.getUserinfo() } diff --git a/tmpmob/ShareSDK/assets/ShareSDK.xml b/tmpmob/ShareSDK/assets/ShareSDK.xml index 87032b3..8591c44 100644 --- a/tmpmob/ShareSDK/assets/ShareSDK.xml +++ b/tmpmob/ShareSDK/assets/ShareSDK.xml @@ -16,7 +16,7 @@ - + diff --git a/tmpmob/assets/ShareSDK.xml b/tmpmob/assets/ShareSDK.xml index 5502f72..076867e 100644 --- a/tmpmob/assets/ShareSDK.xml +++ b/tmpmob/assets/ShareSDK.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file