From 2337dfd8dd29cb552868df65bbd005851686f6a8 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 28 Dec 2022 11:03:29 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=8B=8D?= =?UTF-8?q?=E6=91=84=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +++ app/src/main/AndroidManifest.xml | 10 +++ .../java/com/navinfo/volvo/MainActivity.kt | 31 +++++++ .../navinfo/volvo/ui/camera/CameraFragment.kt | 87 +++++++++++++++++++ .../ui/camera/CameraLifeCycleObserver.kt | 31 +++++++ .../volvo/ui/camera/CameraViewModel.kt | 13 +++ .../volvo/ui/message/ObtainMessageFragment.kt | 39 +++++++++ .../drawable/ic_baseline_camera_alt_24.xml | 6 ++ app/src/main/res/layout/fragment_camera.xml | 21 +++++ .../main/res/layout/fragment_dashboard.xml | 2 +- .../res/layout/fragment_obtain_message.xml | 8 +- .../main/res/navigation/mobile_navigation.xml | 9 ++ app/src/main/res/values/styles.xml | 6 ++ 13 files changed, 269 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt create mode 100644 app/src/main/java/com/navinfo/volvo/ui/camera/CameraLifeCycleObserver.kt create mode 100644 app/src/main/java/com/navinfo/volvo/ui/camera/CameraViewModel.kt create mode 100644 app/src/main/res/drawable/ic_baseline_camera_alt_24.xml create mode 100644 app/src/main/res/layout/fragment_camera.xml diff --git a/app/build.gradle b/app/build.gradle index 9fc9f50..5bcd6b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,4 +82,15 @@ dependencies { implementation 'com.github.Gredicer:datetimepicker:V1.0.0' implementation 'com.google.code.gson:gson:2.10' implementation 'com.yanzhenjie.recyclerview:x:1.3.2' + + // 动态权限申请 https://github.com/permissions-dispatcher/PermissionsDispatcher + implementation "com.github.permissions-dispatcher:permissionsdispatcher:4.9.2" + annotationProcessor "com.github.permissions-dispatcher:permissionsdispatcher-processor:4.9.2" + + // 相机库 https://natario1.github.io/CameraView/about/getting-started + implementation("com.otaliastudios:cameraview:2.7.2") + // 图片压缩算法 https://github.com/Curzibn/Luban + implementation 'top.zibin:Luban:1.1.8' + // Android工具类库 https://github.com/l123456789jy/Lazy + implementation 'com.github.lazylibrary:lazylibrary:1.0.2' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 59ecdb6..6eeda1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,16 @@ + + + + + + + + + + + dialogInterface.dismiss() + // 在SD卡创建项目目录 + + }) + .show() + } + + @OnPermissionDenied(Manifest.permission.CAMERA) + fun onCameraDenied() { + Toast.makeText(this, "当前操作需要您授权读写SD卡权限!", Toast.LENGTH_SHORT).show() + } + + @OnNeverAskAgain(Manifest.permission.CAMERA) + fun onCameraNeverAskAgain() { + Toast.makeText(this, "您已永久拒绝授权读写SD卡权限!", Toast.LENGTH_SHORT).show() + } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt new file mode 100644 index 0000000..1c84f0c --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraFragment.kt @@ -0,0 +1,87 @@ +package com.navinfo.volvo.ui.camera + +import android.os.Bundle +import android.text.TextUtils +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import com.navinfo.volvo.databinding.FragmentCameraBinding +import com.otaliastudios.cameraview.CameraListener +import com.otaliastudios.cameraview.CameraView +import com.otaliastudios.cameraview.PictureResult +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* + + +class CameraFragment : Fragment() { + + private var _binding: FragmentCameraBinding? = null + + // This property is only valid between onCreateView and + // onDestroyView. + private val binding get() = _binding!! + + private val cameraLifeCycleObserver: CameraLifeCycleObserver by lazy { + CameraLifeCycleObserver() + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + lifecycle.addObserver(cameraLifeCycleObserver) + + val cameraViewModel = + ViewModelProvider(this).get(CameraViewModel::class.java) + + _binding = FragmentCameraBinding.inflate(inflater, container, false) + val root: View = binding.root + + val cameraView: CameraView = binding.camera + cameraView.setLifecycleOwner(this) + cameraView.addCameraListener(object:CameraListener() { // 添加拍照回调 + override fun onPictureTaken(result: PictureResult) { + super.onPictureTaken(result) + result.toFile() + // 压缩图片文件 + Luban.with(context) + .load(photos) + .ignoreBy(100) + .setTargetDir(getPath()) + .filter { path -> + !(TextUtils.isEmpty(path) || path.lowercase(Locale.getDefault()) + .endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + // TODO 压缩开始前调用,可以在方法内启动 loading UI + } + + override fun onSuccess(file: File?) { + // TODO 压缩成功后调用,返回压缩后的图片文件 + } + + override fun onError(e: Throwable) { + // TODO 当压缩过程出现问题时调用 + } + }).launch() + } + }) + // 点击拍照 + binding.imgStartCamera.setOnClickListener { + cameraView.takePicture() + } + return root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + lifecycle.removeObserver(cameraLifeCycleObserver) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/camera/CameraLifeCycleObserver.kt b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraLifeCycleObserver.kt new file mode 100644 index 0000000..f567158 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraLifeCycleObserver.kt @@ -0,0 +1,31 @@ +package com.navinfo.volvo.ui.camera + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner + +class CameraLifeCycleObserver: DefaultLifecycleObserver { + + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + } + + override fun onStart(owner: LifecycleOwner) { + super.onStart(owner) + } + + override fun onResume(owner: LifecycleOwner) { + super.onResume(owner) + } + + override fun onPause(owner: LifecycleOwner) { + super.onPause(owner) + } + + override fun onStop(owner: LifecycleOwner) { + super.onStop(owner) + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/camera/CameraViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraViewModel.kt new file mode 100644 index 0000000..681bbb6 --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/ui/camera/CameraViewModel.kt @@ -0,0 +1,13 @@ +package com.navinfo.volvo.ui.camera + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class CameraViewModel : ViewModel() { + + private val _text = MutableLiveData().apply { + value = "This is dashboard Fragment" + } + val text: LiveData = _text +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt index d90d8cf..b8ec592 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt @@ -1,15 +1,21 @@ package com.navinfo.volvo.ui.message +import android.Manifest +import android.content.DialogInterface import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.gredicer.datetimepicker.DateTimePickerFragment import com.navinfo.volvo.databinding.FragmentObtainMessageBinding import com.navinfo.volvo.ui.markRequiredInRed +import permissions.dispatcher.* +import java.util.* class ObtainMessageFragment: Fragment() { private var _binding: FragmentObtainMessageBinding? = null @@ -59,10 +65,43 @@ class ObtainMessageFragment: Fragment() { } // 点击按钮选择拍照 + binding.btnStartCamera.setOnClickListener { + // 启动相机 + startCamera() + } } override fun onDestroyView() { super.onDestroyView() _binding = null } + + @NeedsPermission(Manifest.permission.CAMERA) + fun startCamera() { + + } + + @OnShowRationale(Manifest.permission.CAMERA) + fun showRationaleForCamera(request: PermissionRequest) { +// showRationaleDialog(R.string.permission_camera_rationale, request) +// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show() + MaterialAlertDialogBuilder(context!!) + .setTitle("提示") + .setMessage("当前操作需要您授权相机权限!") + .setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i -> + startCamera() + dialogInterface.dismiss() + }) + .show() + } + + @OnPermissionDenied(Manifest.permission.CAMERA) + fun onCameraDenied() { + Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show() + } + + @OnNeverAskAgain(Manifest.permission.CAMERA) + fun onCameraNeverAskAgain() { + Toast.makeText(context, "您已永久拒绝授权相机权限!", Toast.LENGTH_SHORT).show() + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_camera_alt_24.xml b/app/src/main/res/drawable/ic_baseline_camera_alt_24.xml new file mode 100644 index 0000000..47483ef --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_camera_alt_24.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/layout/fragment_camera.xml b/app/src/main/res/layout/fragment_camera.xml new file mode 100644 index 0000000..e935007 --- /dev/null +++ b/app/src/main/res/layout/fragment_camera.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index d137b00..201541e 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.navinfo.volvo.ui.dashboard.DashboardFragment"> + tools:context="com.navinfo.volvo.ui.dashboard.CameraFragment"> + android:background="@drawable/selector_bg_4_round_corner"> + android:background="@drawable/selector_bg_4_round_corner"> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 229464f..3e42417 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -3,4 +3,10 @@ + + + \ No newline at end of file From d72c9342c56f5864f5b9f093f0b33a3b30395c4f Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 28 Dec 2022 11:15:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=B8=BB=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/navinfo/volvo/MainActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/navinfo/volvo/MainActivity.kt b/app/src/main/java/com/navinfo/volvo/MainActivity.kt index 4363019..7bd160f 100644 --- a/app/src/main/java/com/navinfo/volvo/MainActivity.kt +++ b/app/src/main/java/com/navinfo/volvo/MainActivity.kt @@ -10,7 +10,6 @@ import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupWithNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.navinfo.volvo.R import com.navinfo.volvo.databinding.ActivityMainBinding import permissions.dispatcher.* From c95096d4fdb31165e3b8b772e98add40f6fa1feb Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Tue, 3 Jan 2023 17:03:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=AF=B7=E6=B1=82=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +++ .../navinfo/volvo/http/NavinfoVolvoCall.kt | 23 +++++++++++++++++++ .../navinfo/volvo/http/NavinfoVolvoService.kt | 23 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt create mode 100644 app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt diff --git a/app/build.gradle b/app/build.gradle index 13cf503..eaafd26 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,4 +100,7 @@ dependencies { } // 显示错误提示 https://github.com/nhaarman/supertooltips implementation 'com.nhaarman.supertooltips:library:3.0.0' + // 网络请求包 https://square.github.io/retrofit/ + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt new file mode 100644 index 0000000..97d342b --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt @@ -0,0 +1,23 @@ +package com.navinfo.volvo.http + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class NavinfoVolvoCall { + private val retrofit by lazy { + Retrofit.Builder().baseUrl("http://ec2-52-81-73-5.cn-north-1.compute.amazonaws.com.cn:8088/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + companion object { + private var instance: NavinfoVolvoCall? = null + get() { + if (field == null) { + field = NavinfoVolvoCall() + } + return field + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt new file mode 100644 index 0000000..52ea7ca --- /dev/null +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt @@ -0,0 +1,23 @@ +package com.navinfo.volvo.http + +import retrofit2.http.Body +import retrofit2.http.Multipart +import retrofit2.http.POST +import retrofit2.http.Part +import java.io.File + +interface NavinfoVolvoService { + @POST("/navi/cardDelivery/insertCardByApp") + fun insertCardByApp(@Body insertData: MutableMap) + @POST("/navi/cardDelivery/updateCardByApp") + fun updateCardByApp(@Body updateData: MutableMap) + @POST("/navi/cardDelivery/queryCardListByApp") + fun queryCardListByApp(@Body queryData: MutableMap) + @POST("/navi/cardDelivery/deleteCardByApp") + fun deleteCardByApp(@Body deleteData: MutableMap) + @POST("/img/upload") + @Multipart + fun uploadAttachment(@Part("picture") attachmentFile: File) + @POST("/img/download") + fun downLoadAttachment(@Body downloadData: MutableMap) +} \ No newline at end of file From 7f3560aa5c2db62788de96f718d66c26521ed13b Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 4 Jan 2023 09:46:02 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../com/navinfo/volvo/http/DefaultResponse.kt | 7 ++++ .../navinfo/volvo/http/NavinfoVolvoCall.kt | 21 ++++++---- .../navinfo/volvo/http/NavinfoVolvoService.kt | 7 +++- .../volvo/ui/message/ObtainMessageFragment.kt | 14 +++++-- .../ui/message/ObtainMessageViewModel.kt | 39 ++++++++++++++++--- 6 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/com/navinfo/volvo/http/DefaultResponse.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d19fd34..2e004a7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.NavinfoVolvo" - tools:targetApi="31"> + android:usesCleartextTraffic="true"> { + var code: Int = 0 + var message: String = "" + var data: T? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt index 97d342b..3e1bf0c 100644 --- a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoCall.kt @@ -1,15 +1,20 @@ package com.navinfo.volvo.http +import com.navinfo.volvo.db.dao.entity.Attachment import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.create +import java.io.File class NavinfoVolvoCall { - private val retrofit by lazy { - Retrofit.Builder().baseUrl("http://ec2-52-81-73-5.cn-north-1.compute.amazonaws.com.cn:8088/") - .addConverterFactory(GsonConverterFactory.create()) - .build() - } companion object { + private val service by lazy { + Retrofit.Builder().baseUrl("http://ec2-52-81-73-5.cn-north-1.compute.amazonaws.com.cn:8088/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(NavinfoVolvoService::class.java) + } + private var instance: NavinfoVolvoCall? = null get() { if (field == null) { @@ -17,7 +22,9 @@ class NavinfoVolvoCall { } return field } + + fun getApi(): NavinfoVolvoService { + return service + } } - - } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt index 52ea7ca..e4ea112 100644 --- a/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt +++ b/app/src/main/java/com/navinfo/volvo/http/NavinfoVolvoService.kt @@ -1,5 +1,8 @@ package com.navinfo.volvo.http +import okhttp3.MultipartBody +import okhttp3.RequestBody +import retrofit2.Call import retrofit2.http.Body import retrofit2.http.Multipart import retrofit2.http.POST @@ -17,7 +20,7 @@ interface NavinfoVolvoService { fun deleteCardByApp(@Body deleteData: MutableMap) @POST("/img/upload") @Multipart - fun uploadAttachment(@Part("picture") attachmentFile: File) + suspend fun uploadAttachment(@Part attachmentFile: MultipartBody.Part):DefaultResponse> @POST("/img/download") - fun downLoadAttachment(@Body downloadData: MutableMap) + fun downLoadAttachment(@Body downloadData: MutableMap):Call>> } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt index b1cb9c9..97bb741 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageFragment.kt @@ -16,6 +16,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation +import com.bumptech.glide.Glide import com.easytools.tools.DateUtils import com.easytools.tools.ToastUtils import com.elvishew.xlog.XLog @@ -80,13 +81,18 @@ class ObtainMessageFragment: Fragment() { // 展示照片文件或录音文件 for (attachment in it.attachment) { if (attachment.attachmentType == AttachmentType.PIC) { -// Glide.with(context!!) -// .asBitmap().fitCenter() -// .load(attachment.pathUrl) -// .into(binding.imgMessageAttachment) + Glide.with(context!!) + .asBitmap().fitCenter() + .load(attachment.pathUrl) + .into(binding.imgMessageAttachment) // 显示名称 binding.tvPhotoName.text = attachment.pathUrl.replace("\\", "/").substringAfterLast("/") hasPhoto = true + + // 如果当前attachment文件是本地文件,开始尝试网络上传 + if (!attachment.pathUrl.startsWith("http")) { + obtainMessageViewModel.uploadAttachment(File(attachment.pathUrl)) + } } if (attachment.attachmentType == AttachmentType.AUDIO) { binding.tvAudioName.text = attachment.pathUrl.replace("\\", "/").substringAfterLast("/") diff --git a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt index 795ef28..4fb4456 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/message/ObtainMessageViewModel.kt @@ -1,13 +1,19 @@ package com.navinfo.volvo.ui.message -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.liveData +import androidx.lifecycle.* +import com.easytools.tools.ToastUtils +import com.elvishew.xlog.XLog import com.navinfo.volvo.db.dao.entity.Attachment -import com.navinfo.volvo.db.dao.entity.Message import com.navinfo.volvo.db.dao.entity.AttachmentType -import java.util.UUID +import com.navinfo.volvo.db.dao.entity.Message +import com.navinfo.volvo.http.NavinfoVolvoCall +import kotlinx.coroutines.launch +import okhttp3.MediaType +import okhttp3.MultipartBody +import okhttp3.RequestBody +import java.io.File +import java.util.* + class ObtainMessageViewModel: ViewModel() { private val msgLiveData: MutableLiveData by lazy { @@ -84,4 +90,25 @@ class ObtainMessageViewModel: ViewModel() { this.msgLiveData.value?.sendDate = sendTime this.msgLiveData.postValue(this.msgLiveData.value) } + + fun uploadAttachment(attachmentFile: File) { + // 启用协程调用网络请求 + viewModelScope.launch { + try { + val requestFile: RequestBody = + RequestBody.create(MediaType.parse("multipart/form-data"), attachmentFile) + val body = MultipartBody.Part.createFormData("picture", attachmentFile.getName(), requestFile) + val result = NavinfoVolvoCall.getApi().uploadAttachment(body) + XLog.d(result.code) + if (result.code == 200) { // 请求成功 + // 获取上传后的结果 + } else { + ToastUtils.showToast(result.message) + } + } catch (e: Exception) { + ToastUtils.showToast(e.message) + XLog.d(e.message) + } + } + } } \ No newline at end of file