#android-studio #kotlin #android-activity #gson #android-pendingintent
#котлин #android-активность #gson #android-pendingintent
Вопрос:
Я пытаюсь запустить действие пользовательского интерфейса из службы NotificationListiner,затем в пользовательском интерфейсе, когда пользователь нажимает да: выполнить PendingIntent();иначе: завершить()
Я пытался достичь вышеуказанного с Dialog,AlertDialog
помощью, но так NotificationListiner
как это была фоновая служба, она не работала. Затем сделал новый Activity
;
Пробовал с Gson
SbnContainer.kt
class SbnContainer { lateinit var notification: Notification lateinit var title: String lateinit var desc: String constructor(){ Log.d("TAG", "Salaam") } constructor(notification: Notification, title:String, desc:String){ this.notification = notification this.title= title this.desc = desc } }
Звоню Из NotificationService
var i = Intent(this,CAlertWindow::class.java) i.flags = Intent.FLAG_ACTIVITY_NEW_TASK val gson = Gson() var a = SbnContainer(sbn.notification, title, desc) val myJson = gson.toJson(a) i.putExtra("PACKAGE", myJson) startActivity(i)
Получение от CAlertWindow(AppCompatActivity)
val gson = Gson() val ob: SbnContainer = gson.fromJson(intent.getStringExtra("PACKAGE"), SbnContainer::class.java) pendingIntent = ob.notification.contentIntent alertWindowLayoutBinding.alrTitle.text = ob.title alertWindowLayoutBinding.alrDesc.text = ob.desc Log.d("Abdx79/AlertWindow", "In Alert Window") alertWindowLayoutBinding.alrOpnB.setOnClickListener { pendingIntent.send() } alertWindowLayoutBinding.alrDntB.setOnClickListener { finish() }
Ошибка при вызове startActivity(i)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.abdx79.notifications_manager/com.abdx79.notifications_manager.CAlertWindow}: java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.CharSequence. Registering an InstanceCreator with Gson for this type may fix this problem. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199) at android.os.Handler.dispatchMessage(Handler.java:112) at android.os.Looper.loop(Looper.java:216) at android.app.ActivityThread.main(ActivityThread.java:7625) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) Caused by: java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.CharSequence. Registering an InstanceCreator with Gson for this type may fix this problem.
Так как же я могу это решить??
Ответ №1:
Вы можете использовать Serializable
для передачи объекта, такого как -gt;
class Shop( val name: String, val details: String?, val id: Int, ):Serializable
теперь передайте этот класс магазина, как
var shop = Shop("name","details",1) val intent = Intent(this, AnotherActivity::class.java).putExtra( "SHOP", shop ) startActivity(intent)
теперь получите этот класс магазина из другого занятия
val shope = intent.getSerializableExtra("SHOP") as Shop
вы также можете использовать Parcelable
вместо Serializable
Комментарии:
1. я получаю эту ошибку при описанном выше подходе
W/System.err: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.abdx79.notifications_manager.SbnContainer) at android.os.Parcel.writeSerializable(Parcel.java:1714) at android.os.Parcel.writeValue(Parcel.java:1662) at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1583) W/System.err: at android.os.Bundle.writeToParcel(Bundle.java:1233)