如何解决Jetpack Compose 渲染问题在设计屏幕中出现 NullPointer 异常
我创建了一个活动,当我运行时,我在我的 android 设备上看到了结果,但我无法在设计屏幕中使用 @Preview @Composable
注释看到结果,而且我总是看到渲染问题。空指针异常。
主活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
createViews();
}
}
@Composable
fun createViews(){
ScrollableColumn(
modifier = Modifier
.fillMaxSize()
.background(color = Color(0xFFf2f2f2))
)
{
Image(
bitmap = imageFromresource(res = resources,resId = R.drawable.logo_2),modifier = Modifier
.size(100.dp,200.dp)
.align(alignment = Alignment.CenterHorizontally),contentScale = ContentScale.Crop
)
Column(
Modifier.padding(20.dp)
) {
Text(
text = "Archi",style = TextStyle(
color = Color(0xFFffd600),fontSize = TextUnit.Companion.Sp(20)
)
)
Spacer(modifier = Modifier.padding(10.dp))
Text(
text = "test",style = TextStyle(
color = Color(0xFFf4511e),fontSize = TextUnit.Companion.Sp(20)
)
)
Spacer(modifier = Modifier.padding(10.dp))
Text(
text = "xxx-xxxxxxx",style = TextStyle(
color = Color(0xFF00e676),fontSize = TextUnit.Companion.Sp(20)
)
)
}
}
}
@Preview
@Composable
fun defaultPreview(){
//Conmposable
createViews();
}
}
例外:
java.lang.NullPointerException 在 android.content.Contextwrapper.getResources(Contextwrapper.java:97) 在 android.view.ContextThemeWrapper.getResourcesInternal(ContextThemeWrapper.java:134) 在 android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:128) 在 androidx.appcompat.app.AppCompatActivity.getResources(AppCompatActivity.java:592) 在 com.example.mvvmapp.MainActivity$createViews$1.invoke(MainActivity.kt:43) 在 com.example.mvvmapp.MainActivity$createViews$1.invoke(MainActivity.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:155) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.foundation.ScrollKt.ScrollableColumn(Scroll.kt:528) 在 com.example.mvvmapp.MainActivity.createViews(MainActivity.kt:34) 在 com.example.mvvmapp.MainActivity.defaultPreview(MainActivity.kt:89) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 androidx.compose.ui.tooling.preview.PreviewUtilsKt.invokeComposableMethod(PreviewUtils.kt:141) 在 androidx.compose.ui.tooling.preview.PreviewUtilsKt.invokeComposableViaReflection(PreviewUtils.kt:185) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3$2$composable$1.invoke(ComposeViewAdapter.kt:437) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3$2$composable$1.invoke(ComposeViewAdapter.kt) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3$2.invoke(ComposeViewAdapter.kt:471) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3$2.invoke(ComposeViewAdapter.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) 在 androidx.compose.ui.tooling.InspectableKt.Inspectable(Inspectable.kt:65) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:384) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter.WrapPreview(ComposeViewAdapter.kt:383) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter.access$WrapPreview(ComposeViewAdapter.kt) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:430) 在 androidx.compose.ui.tooling.preview.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.ui.platform.ComposeView.Content(ComposeView.kt:293) 在 androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.kt:161) 在 androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) 在 androidx.compose.ui.platform.AmbientsKt.ProvideCommonAmbients(Ambients.kt:276) 在 androidx.compose.ui.platform.AndroidambientsKt$ProvideAndroidambients$3.invoke(Androidambients.kt:176) 在 androidx.compose.ui.platform.AndroidambientsKt$ProvideAndroidambients$3.invoke(Androidambients.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) 在 androidx.compose.ui.platform.AndroidambientsKt.ProvideAndroidambients(Androidambients.kt:168) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.kt:261) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.kt:260) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.kt) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) 在 androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt) 在 androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:2906) 在 androidx.compose.runtime.Composer.composeInitial(Composer.kt:2046) 在 androidx.compose.runtime.recomposer.composeInitial$runtime_release(recomposer.kt:566) 在 androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:109) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.kt:243) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.kt) 在 androidx.compose.ui.platform.AndroidComposeView.setonViewTreeOwnersAvailable(AndroidComposeView.kt:548) 在 androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.kt:234) 在 androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.kt:285) 在 androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354) 在 androidx.lifecycle.LifecycleRegistry.addobserver(LifecycleRegistry.java:196) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.kt:241) 在 androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.kt) 在 androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.kt:617) 在 android.view.View.dispatchAttachedToWindow(View.java:20479) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3489) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496) 在 android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496) 在 android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:44) 在 com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:361) 在 com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:431) 在 com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141) 在 com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:696) 在 com.android.tools.idea.rendering.RenderTask.lambda$inflate$6(RenderTask.java:852) 在 com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$2.run(RenderExecutor.kt:187) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)
依赖关系
def composeVersion = "1.0.0-alpha10"
implementation "androidx.compose.ui:ui:$composeVersion"
// Tooling support (Previews,etc.)
implementation "androidx.compose.ui:ui-tooling:$composeVersion"
// Foundation (Border,Background,Box,Image,Scroll,shapes,animations,etc.)
implementation "androidx.compose.foundation:foundation:$composeVersion"
// Material Design
implementation "androidx.compose.material:material:$composeVersion"
// Material design icons
implementation "androidx.compose.material:material-icons-core:$composeVersion"
implementation "androidx.compose.material:material-icons-extended:$composeVersion"
// Integration with observables
implementation "androidx.compose.runtime:runtime-livedata:$composeVersion"
implementation "androidx.compose.runtime:runtime-rxjava2:$composeVersion"
解决方法
预览适用于我使用 1.0.0-alpha11。
我必须添加这个:
val resources = AmbientContext.current.resources
以及对图像的内容描述,如下所示:
val resources = AmbientContext.current.resources
Image(
contentDescription = "",bitmap = imageFromResource(res = resources,resId = R.drawable.image),modifier = Modifier
.size(100.dp,200.dp)
.align(alignment = Alignment.CenterHorizontally),contentScale = ContentScale.Crop
)
您确定您使用的是金丝雀版本的 Android Studio?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。