开始输入后单击搜索字段时汽车应用程序崩溃

问题描述 投票:0回答:1

我的 Android Automotive 应用程序中的键盘/软输入有问题。我正在使用 SearchTemplate,当我在输入一些字母后单击搜索字段时,应用程序崩溃了。如果我单击放大镜图标或文本字段,但不单击 x 按钮(清空该字段),就会发生这种情况。仅当我开始在搜索字段中输入一些字母时,才会发生这种情况。如果搜索字段为空并且我单击它,唯一发生的事情就是它被聚焦。 这是错误消息:

D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc VFE...... .F...... 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT E/CarApp.Act: Connection lost android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:571) at androidx.car.app.activity.renderer.IRendererCallback$Stub$Proxy.onCreateInputConnection(IRendererCallback.java:297) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$1(BaseCarAppActivity.java:178) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda6.invoke(Unknown Source:4) at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:116) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) E/CarApp.Act: Remote exception (host render service) android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:571) at androidx.car.app.activity.renderer.surface.ISurfaceListener$Stub$Proxy.onSurfaceDestroyed(ISurfaceListener.java:181) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.lambda$notifySurfaceDestroyed$2$androidx-car-app-activity-renderer-surface-SurfaceHolderListener(SurfaceHolderListener.java:103) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener$$ExternalSyntheticLambda1.invoke(Unknown Source:4) at androidx.car.app.activity.ServiceDispatcher.lambda$dispatchNoFail$1(ServiceDispatcher.java:90) at androidx.car.app.activity.ServiceDispatcher$$ExternalSyntheticLambda1.invoke(Unknown Source:2) at androidx.car.app.activity.ServiceDispatcher.fetchNoFail(ServiceDispatcher.java:153) at androidx.car.app.activity.ServiceDispatcher.dispatchNoFail(ServiceDispatcher.java:89) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.notifySurfaceDestroyed(SurfaceHolderListener.java:102) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.surfaceDestroyed(SurfaceHolderListener.java:78) at android.view.SurfaceView.notifySurfaceDestroyed(SurfaceView.java:1981) at android.view.SurfaceView.updateSurface(SurfaceView.java:1157) at android.view.SurfaceView.setVisibility(SurfaceView.java:345) at androidx.car.app.activity.BaseCarAppActivity.lambda$onStateChanged$3$androidx-car-app-activity-BaseCarAppActivity(BaseCarAppActivity.java:399) at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda3.run(Unknown Source:4) at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39) at androidx.car.app.activity.BaseCarAppActivity.onStateChanged(BaseCarAppActivity.java:385) at androidx.car.app.activity.BaseCarAppActivity.$r8$lambda$dw3rK9QfgsUWuk2bAICsaK01RZs(Unknown Source:0) at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda5.onChanged(Unknown Source:4) at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133) at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151) at androidx.lifecycle.LiveData.setValue(LiveData.java:309) at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50) at androidx.car.app.activity.CarAppViewModel.lambda$onError$0$androidx-car-app-activity-CarAppViewModel(CarAppViewModel.java:185) at androidx.car.app.activity.CarAppViewModel$$ExternalSyntheticLambda2.run(Unknown Source:4) at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39) at androidx.car.app.activity.CarAppViewModel.onError(CarAppViewModel.java:177) at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:119) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) E/CarApp.Act: at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

I/CarApp.Act: Unbinding from ComponentInfo
E/CarApp.Act: InputConnectionListener has not been received yet. Canceling the input
D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc GFE...... ......I. 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection
D/EGL_emulation: app_time_stats: avg=73260.20ms min=85.08ms max=219285.45ms count=3
W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
onGetTemplate()函数中的代码:

return SearchTemplate.Builder( object : SearchCallback { override fun onSearchTextChanged(searchText: String) { if(searchText.isNotEmpty()){ searchCompleted() getAddressFromName(searchText) doSearch(searchText) } } override fun onSearchSubmitted(searchTerm: String) { mIsSearchComplete = true searchCompleted() doSearch(searchTerm) } }) .setShowKeyboardByDefault(true) .setItemList(mItemList!!) .build()

doSearch功能:

fun doSearch(searchText: String) { val builder = ItemList.Builder() places.clear() if (searchText.isEmpty()) { mItemList = withNoResults(builder)?.build(); } if (!isInternetConnection) { CarToast.makeText( carContext, "Ingen internett tilgang", CarToast.LENGTH_LONG ) .show() return } val destinations = getAddressFromName(searchText) if(destinations.isNotEmpty()){ destinations.forEach{ val addressLine = it.getAddressLine(0) builder.addItem( Row.Builder() .setTitle(addressLine) .setOnClickListener { onClickSearch(it) } .build()) } mItemList = builder.build() invalidate() return } }

我尝试删除 onSearchTextChanged 和 onSearchSubscribed 函数的主体,以查看是否有任何内容导致应用程序崩溃,但应用程序仍然崩溃。

这就是应用程序发生时的样子:

在搜索字段中输入一个字母:

然后单击搜索字段,应用程序崩溃:

我尝试调试这个问题并用谷歌搜索,但我找不到任何东西。

android kotlin android-automotive automotive
1个回答
0
投票
https://developers.google.com/cars/design/create-apps/apps-for-drivers/templates/search-template#:~:text=During%20drives%2C%20users%20can%E2% 80%99t%20access%20the%20keyboard%2C

了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.