如果重试,则inappupdate android时java.lang.reflect.InvocationTargetException [英] java.lang.reflect.InvocationTargetException while inappupdate android if retries
问题描述
重现此错误的步骤:
- 点击更新按钮&因为它是
AppUpdateType.FLEXIBLE
,所以它会打开更新应用程序对话框. - 点击
No, thanks
- 再次尝试更新.应用程序崩溃并出现以下错误:
- Click update button & it opens update app dialog since it's
AppUpdateType.FLEXIBLE
. - Click
No, thanks
- Try update again. App crashes with following error:
在下一行通过inappupdate更新应用程序时遇到此异常.
I'm getting this exception while updating the app via inappupdate on following line.
appUpdateManager?.startUpdateFlowForResult(it, AppUpdateType.FLEXIBLE, activity, REQUEST_CODE_FLEXI_UPDATE) //it == AppUpdateInfo object
Stacktrace:
Stacktrace:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:451)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: android.content.IntentSender$SendIntentException
at android.app.Activity.startIntentSenderForResultInner(Activity.java:4878)
at android.app.Activity.startIntentSenderForResult(Activity.java:4847)
at androidx.fragment.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:796)
at android.app.Activity.startIntentSenderForResult(Activity.java:4814)
at androidx.fragment.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:781)
at com.google.android.play.core.appupdate.b.startUpdateFlowForResult(Unknown Source:22)
at newProfile.NewProfileFragment.startForInAppUpdate(NewProfileFragment.kt:752)
at newProfile.NewProfileFragment.access$startForInAppUpdate(NewProfileFragment.kt:60)
at newProfile.NewProfileFragment$setupAppUpdate$3.onClick(NewProfileFragment.kt:682)
at android.view.View.performClick(View.java:6935)
at android.widget.TextView.performClick(TextView.java:12752)
at android.view.View$PerformClick.run(View.java:26214)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
详细信息:
Android版本:8.0
电话:三星J7
Android version: 8.0
Phone: Samsung J7
更新
根据文档,
startUpdateFlowForResult
仅应调用一次AppUpdateInfo
实例.要再次调用,必须创建AppUpdateInfo
实例.
As per documentation,
startUpdateFlowForResult
should only called for onceAppUpdateInfo
instance. For calling again, you must createAppUpdateInfo
instance.
但是由于其实例取决于以下条件,因此如何确保在调用startUpdateFlowForResult
but since its instance depends on below condition, how to make sure its instance newly gets created before calling startUpdateFlowForResult
appUpdateManager?.appUpdateInfo?.addOnSuccessListener {
if (it.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE &&
it.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
appUpdateInfo = it
updateAvailable.value = true
} else {
updateAvailable.value = false
}
}
也无法获取正在下载的应用的进度值,但在文档中找不到该值.就我而言,onActivityResult不断调用,但是哪个键提供进度值?
Also how to get progress value of app being downloaded, couldn't find it in documentation. In my case, onActivityResult keeps calling but which key gives progress value?
Also facing another issue with different use case: inappupdate not available after skipping installation
推荐答案
问题是您试图使用相同的AppUpdateInfo
两次触发startUpdateFlowForResult
.
The problem is that you are trying to trigger startUpdateFlowForResult
with the same AppUpdateInfo
twice.
按照@Slaw的建议,在更新失败或取消后,您需要再次执行appUpdateManager.appUpdateInfo.addOnSuccessListener
才能使另一个AppUpdateInfo
实例再次调用startUpdateFlowForResult
As @Slaw suggested, after a failed or canceled update you need to do appUpdateManager.appUpdateInfo.addOnSuccessListener
again in order to have another instance of AppUpdateInfo
to make second call to startUpdateFlowForResult
这篇关于如果重试,则inappupdate android时java.lang.reflect.InvocationTargetException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!