小编Pie*_*ira的帖子

如何在新版本的Android Studio中的模拟器中配置代理?

问题描述

我需要通过 Android Studio 在模拟器中手动配置代理。从Android官方文档来看,建议可以在模拟器扩展控件的“设置”选项卡中进行此更改。问题是,在我看来,这个文档已经过时了,因为这个设置不再显示在 Android Studio 模拟器扩展控件的“设置”选项卡中。

文档

有代理

我的安卓工作室

没有代理

我的 Android Studio 版本

Android Studio Bumblebee | 2021.1.1
Build #AI-211.7628.21.2111.8092744, built on January 19, 2022
Runtime version: 11.0.11+9-b60-7590822 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 8
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: com.wakatime.intellij.plugin (13.1.10), wu.seal.tool.jsontokotlin (3.7.2), org.jetbrains.kotlin (211-1.6.10-release-923-AS7442.40), com.developerphil.adbidea (1.6.4), org.jetbrains.compose.desktop.ide (1.0.0), ru.adelf.idea.dotenv (2021.2), org.intellij.plugins.markdown (211.7142.37)
Run Code Online (Sandbox Code Playgroud)

ide android android-studio

44
推荐指数
2
解决办法
2万
查看次数

如何检查一个方法是否没有被mock调用?

我需要检查单元测试中是否未调用某个方法。这是我所做的一个示例测试,用于检查该方法是否被调用并且它工作得很好:

@Test
fun viewModel_selectDifferentFilter_dispatchRefreshAction() {
    val selectedFilter = FilterFactory.make()
    val event = GroceriesAisleFiltersUiEvent.SelectFilter(
        filter = selectedFilter,
        refreshListAction = mockk()
    )
    every { event.refreshListAction(selectedFilter) } just runs
    viewModel.dispatchViewAction(event)
    verify { event.refreshListAction(selectedFilter) }
}
Run Code Online (Sandbox Code Playgroud)

为此,我使用 mockk 的verify函数来检查该方法是否被调用。

有没有办法使用 检查mockk该方法是否未被调用?简而言之,我需要用此检查代替注释来完成下面的代码:

@Test
fun viewModel_selectSameFilter_notDispatchRefreshAction() {
    val selectedFilter = viewModel.viewState.value.selectedFilter
    val event = GroceriesAisleFiltersUiEvent.SelectFilter(
        filter = selectedFilter,
        refreshListAction = mockk()
    )
    every { event.refreshListAction(selectedFilter) } just runs
    viewModel.dispatchViewAction(event)
    // TODO: verify if method's not invoked
}
Run Code Online (Sandbox Code Playgroud)

android unit-testing kotlin mockk mockk-verify

29
推荐指数
1
解决办法
2万
查看次数

如何使用新版本的撰写导航传递可打包参数?

我有一个用 jetpack compose 制作的应用程序,它工作得很好,直到我将 compose 导航库从版本2.4.0-alpha07升级到版本2.4.0-alpha08 在 alpha08 版本中,在我看来,该类arguments的属性NavBackStackEntry是 a val,所以它不能像我们在 2.4.0-alpha07 版本中那样重新分配。在2.4.0-alpha08版本中如何解决这个问题?

我的导航组件是这样的:

@Composable
private fun NavigationComponent(navController: NavHostController) {
    NavHost(navController = navController, startDestination = "home") {
        composable("home") { HomeScreen(navController) }
        composable("details") {
            val planet = navController
                .previousBackStackEntry
                ?.arguments
                ?.getParcelable<Planet>("planet")
            planet?.let {
                DetailsScreen(it, navController)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使导航发生在详细信息页面的部分是在这个函数中:

private fun navigateToPlanet(navController: NavHostController, planet: Planet) {
    navController.currentBackStackEntry?.arguments = Bundle().apply {
        putParcelable("planet", planet)
    }
    navController.navigate("details")
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过简单地应用到函数arguments的重复navigateToPlanet使用 …

android android-jetpack-navigation android-jetpack-compose

18
推荐指数
2
解决办法
2万
查看次数

ActivityTestRule 在 Android 测试中已弃用

这是我的仪器测试的范围:

...
import androidx.test.rule.ActivityTestRule

@RunWith(AndroidJUnit4::class)
@LargeTest
class InstrumentDialogFragmentTest {

    @get:Rule
    val activityRule = ActivityTestRule(MainActivity::class.java)
}
Run Code Online (Sandbox Code Playgroud)

我的等级:

androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test:rules:1.4.0'
Run Code Online (Sandbox Code Playgroud)

我收到此警告:

'ActivityTestRule<T : Activity!>' is deprecated. Deprecated in Java
Run Code Online (Sandbox Code Playgroud)

android automated-tests junit4 android-instrumentation deprecation-warning

13
推荐指数
1
解决办法
8697
查看次数

如何在依赖于视图模型的可组合函数中进行预览?

问题描述

HomeScreen我想在预览功能中预览可组合功能HomeScreenPrevieiw。但是这是不可能的,因为我收到以下错误:

java.lang.IllegalStateException: ViewModels creation is not supported in Preview
    at androidx.compose.ui.tooling.ComposeViewAdapter$FakeViewModelStoreOwner$1.getViewModelStore(ComposeViewAdapter.kt:709)
    at androidx.lifecycle.ViewModelProvider.<init>(ViewModelProvider.kt:105)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.get(ViewModel.kt:82)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.viewModel(ViewModel.kt:72)
    at com.example.crud.ui.screens.home.HomeScreenKt.HomeScreen(HomeScreen.kt:53)
    at com.example.crud.ui.screens.home.HomeScreenKt.HomeScreenPreview(HomeScreen.kt:43)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    ...
Run Code Online (Sandbox Code Playgroud)

我的代码

这是我的HomeScreen代码:

@Composable
fun HomeScreen(
    viewModel: HomeViewModel = hiltViewModel(),
    navigateToDetailsAction: () -> Unit,
    openCardDetailsAction: (Int) -> Unit
) {
    val cities = viewModel.cities.observeAsState(listOf())
    Scaffold(
        topBar = { HomeAppBar() },
        floatingActionButton = { HomeFab(navigateToDetailsAction) }
    ) {
        HomeContent(cities) { id -> openCardDetailsAction(id) }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的预览功能的代码:

@Preview
@Composable …
Run Code Online (Sandbox Code Playgroud)

android android-viewmodel android-jetpack-compose

12
推荐指数
1
解决办法
7124
查看次数

如何减少jetpack中导航图标和标题之间的水平空间组成“TopAppBar”?

我正在 jetpack compose 中制作一个应用程序栏,但导航图标和标题之间存在间距问题。

这是我的撰写功能:

@Composable
fun DetailsAppBar(coin: Coin, backAction: () -> Unit) {
    TopAppBar(
        navigationIcon = {
            IconButton(onClick = { backAction() }) {
                Icon(
                    imageVector = Icons.Filled.ArrowBack,
                    contentDescription = null
                )
            }
        },
        title = { Text(text = "${coin.rank}. ${coin.name} (${coin.symbol})") }
    )
}
Run Code Online (Sandbox Code Playgroud)

这是我的预览功能:

@Composable
@Preview
fun DetailsAppBarPreview() {
    val bitcoin = Coin(
        id = "",
        isActive = true,
        name = "Bitcoin",
        rank = 1,
        symbol = "BTC"
    )
    DetailsAppBar(coin = bitcoin, backAction = {})
}
Run Code Online (Sandbox Code Playgroud)

这是我的撰写功能的视觉预览: 自定义应用栏预览

这是我要减少的空间: …

android android-appbarlayout android-jetpack-compose

10
推荐指数
1
解决办法
3945
查看次数

如何在jetpack compose中创建带掩码的文本字段输入?

我需要在 jetpack compose 中使用一个与如下掩码配合使用的文本字段:NNNNN-NNN其中 N 是从 0 到 9 的整数。我需要我的可组合函数在以下位置包含此掩码OutlinedTextField

@Composable
private fun EditTextField(
    labelText: String,
    value: String,
    keyboardType: KeyboardType = KeyboardType.Text,
    onValueChanged: (String) -> Unit
) {
    OutlinedTextField(
        modifier = Modifier.padding(top = 8.dp),
        label = { Text(text = labelText) },
        keyboardOptions = KeyboardOptions(keyboardType = keyboardType),
        value = value,
        onValueChange = onValueChanged
    )
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-compose-textfield android-jetpack-compose-text

9
推荐指数
2
解决办法
9224
查看次数

如何使用 hilt 将 jetpack compose 中的“rememberNavController”注入到 Activity 中?

我正在尝试将其注入navHostController我的MainActivity使用刀柄中。但在尝试编译代码时出现以下错误:

> Task :app:kaptDebugKotlin
C:\Users\pierr\AndroidStudioProjects\AndroidApps\Compose\Udemy\course01\crud\app\build\generated\source\kapt\debug\com\example\crud\CrudApplication_HiltComponents.java:129: error: [Dagger/MissingBinding] androidx.navigation.NavHostController cannot be provided without an @Inject constructor or an @Provides-annotated method.
  public abstract static class SingletonC implements CrudApplication_GeneratedInjector,
                         ^
      androidx.navigation.NavHostController is injected at
          com.example.crud.ui.MainActivity.navHostController
      com.example.crud.ui.MainActivity is injected at
          com.example.crud.ui.MainActivity_GeneratedInjector.injectMainActivity(com.example.crud.ui.MainActivity) [com.example.crud.CrudApplication_HiltComponents.SingletonC ? com.example.crud.CrudApplication_HiltComponents.ActivityRetainedC ? com.example.crud.CrudApplication_HiltComponents.ActivityC]

> Task :app:kaptDebugKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-navigation android-jetpack-compose dagger-hilt

7
推荐指数
1
解决办法
9024
查看次数

Jetpack Compose 中 Box 内组件中的“fillMaxSize()”和“matchParentSize()”有什么区别?

我正在 Jetpack Compose 中创建一个组件,并意识到当我在 a 中创建一个 Composable 时,Box该组件可能会假设 2 个最大填充可能性:Modifier.fillMaxSize()Modifier.matchParentSize()。如下所示:

Box(
    modifier = modifier // This modifier is received by parameter of another composable function
) {
    Canvas(modifier = Modifier.matchParentSize()) {
        // Using match parent size
    }
}
Run Code Online (Sandbox Code Playgroud)

Box(
    modifier = modifier // This modifier is received by parameter of another composable function
) {
    Canvas(modifier = Modifier.fillMaxSize()) {
        // Using fill max size
    }
}
Run Code Online (Sandbox Code Playgroud)

这两种模式之间的实际区别是什么?为什么我不能设置Modifier.matchParentSize()为 aColumn或 a …

android android-jetpack-compose

5
推荐指数
1
解决办法
4977
查看次数

如何在 Jetpack Compose 中使用 Coil 显示自定义可组合占位符?

我需要使用 Coil 在 Jetpack Compose 中显示自定义占位符,但该占位符不是可绘制的,而是我自定义的可组合函数。用线圈可以做到这一点吗?这是我使用线圈的代码片段:

Image(
    modifier = Modifier
        .size(120.dp)
        .align(Alignment.CenterHorizontally),
    painter = rememberImagePainter(
        data = entry.imageUrl,
        builder = {
            crossfade(true)
            MyPlaceholder(resourceId = R.drawable.ic_video)
        },
    ),
    contentDescription = entry.pokemonName
)
Run Code Online (Sandbox Code Playgroud)

这是我的自定义占位符撰写功能:

@Composable
fun MyPlaceholder(@DrawableRes resourceId: Int) {
    Surface(
        modifier = Modifier.fillMaxSize(),
        color = Color(0xFFE0E0E0)
    ) {
        Box(
            modifier = Modifier.fillMaxSize(),
            contentAlignment = Alignment.Center,
        ) {
            Surface(
                modifier = Modifier.size(30.dp),
                shape = CircleShape,
                color = Color.White
            ) {
                Image(
                    modifier = Modifier
                        .padding(
                            PaddingValues(
                                start = 11.25.dp,
                                top = 9.25.dp, …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose coil

4
推荐指数
1
解决办法
4113
查看次数