小编Hec*_*tor的帖子

如何配置 kapt 在 Android Gradle 构建文件中生成 Java17 Java 存根

我当前的 Android 项目显示以下构建消息:-

> Task :shared:resource:kaptGenerateStubsProductionDebugKotlin
'compileProductionDebugJavaWithJavac' task (current target is 17) and 'kaptGenerateStubsProductionDebugKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.
By default will become an error since Gradle 8.0+! Read more: https://kotl.in/gradle/jvm/target-validation
Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain
Run Code Online (Sandbox Code Playgroud)

如何配置 kapt 在特定版本的 java 中生成存根?

我努力了...

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
    kotlinJavaToolchain.jdk.use(
            "/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home",
            JavaVersion.VERSION_17
    )
}
Run Code Online (Sandbox Code Playgroud)

kapt {
    javacOptions {
        option("--target", 17)
    }
}
Run Code Online (Sandbox Code Playgroud)

这些都没有任何区别

是否可以控制 Android 项目中 kapt 生成的存根的 java 版本?

在 kapt3 中启用详细日志记录后,我现在可以看到我已正确配置目标 …

java android gradle kapt

14
推荐指数
1
解决办法
7330
查看次数

是否可以检测并排放置的Android设备

我正在开发一个Android应用程序,它要求设备并排放置和/或相互上下.

我知道我可以使用Nearby API来检测"附近"设备但是我需要更多一些"更细粒度"的东西.

我的应用程序需要能够识别位于左侧,上方,右侧或下方的设备.虽然所有设备都平放在桌子上(例如).

我在网上找不到任何描述此用例的内容.

可能吗?

UPDATE

我的用例是我希望Android设备能够检测到任意数量的"其他设备",无论是向左还是向右.这些器件将水平放置,每个器件之间有一个"小"间隙.

以同样的方式,你可以布置儿童的字母块来拼出单词或短语,或编号的块来进行总和.

不仅设备线能够检测到它们左边和右边的直接邻居,两端的两个设备应该能够检测到它们是线路的起点和终点(从左到右读取).

android proximity

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

如何使用Java(非Kotlin)在Android中使用RxJava管理状态

我试图根据杰克沃顿提出的以下谈话开发一个Android应用程序

The State of Managing State with RxJava
21 March 2017 – Devoxx (San Jose, CA, USA)
Run Code Online (Sandbox Code Playgroud)

杰克答应了我无法找到的第2部分和/或GITHUB示例(如果确实存在)

在高层次上,我可以关注/理解上述谈话的大部分内容.

但是我有以下问题.

我可以看到如何使用UiEvent,UiModel,Action和Result来保持关注点.

令我困惑的是以下几点: -

幻灯片194上的图表显示了Observables的"流/流"

Android Device -----> Observable<UiEvent> -----> <application code> -----> Observable<Action>  -----> {Backend}
{Backend}      -----> Observable<Result>  -----> <application code> -----> Observable<UiModel> -----> Android Device
Run Code Online (Sandbox Code Playgroud)

幻灯片210包含此代码片段,显示结果流如何"扫描"到UiModel中

SubmitUiModel initialState = SubmitUiModel.idle();
Observable<Result> results = /* ... */;
Observable<SubmitUiModel> uiModels = results.scan(initialState, (state, result) -> {
if (result == CheckNameResult.IN_FLIGHT
|| result == SubmitResult.IN_FLIGHT)
return SubmitUiModel.inProgress();
if (result == CheckNameResult.SUCCESS)
return …
Run Code Online (Sandbox Code Playgroud)

android rx-java2

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

使用 TestCoroutineDispatcher(已弃用)替代方案对 Kotlin 协程进行 Android 测试

我正在研究 Android 应用程序中的协程测试并遵循此代码实验室Advanced Android in Kotlin 05.3: Testing Coroutines and Jetpack integrations

此 Codelab 包含以下代码片段

@ExperimentalCoroutinesApi
val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()

@ExperimentalCoroutinesApi
@Before
fun setupDispatcher() {
    Dispatchers.setMain(testDispatcher)
}

@ExperimentalCoroutinesApi
@After
fun tearDownDispatcher() {
    Dispatchers.resetMain()
    testDispatcher.cleanupTestCoroutines()
}
Run Code Online (Sandbox Code Playgroud)

然而 TestCoroutineDispatcher 被标记为已弃用,并带有以下评论:-

/**
 * [CoroutineDispatcher] that performs both immediate and lazy execution of coroutines in tests
 * and uses a [TestCoroutineScheduler] to control its virtual clock.
 *
 * By default, [TestCoroutineDispatcher] is immediate. That means any tasks scheduled to be run without …
Run Code Online (Sandbox Code Playgroud)

android unit-testing kotlin-coroutines

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

如何实现用户输入的定期处理?

我当前的Android应用程序允许用户远程搜索内容.

例如,向用户显示一个EditText接受其搜索字符串并触发远程API调用的用户,该调用返回与输入的文本匹配的结果.

更糟糕的情况是,我只需添加一个TextWatcher并在每次调用时触发API调用onTextChanged.这可以通过在进行第一次API调用之前强制用户输入至少N个字符来进行搜索来改进.

"完美"解决方案具有以下特点: -

一旦用户开始输入搜索字符串

定期(每M毫秒)消耗输入的整个字符串.每当周期到期并且当前用户输入与先前的用户输入不同时触发API调用.

[是否有可能与输入的文本长度相关的动态超时?例如,当文本"短"时,API响应大小将很大并且需要更长时间才能返回和解析; 随着搜索文本变得越来越长,API响应大小将随着"飞行"和解析时间而减少

当用户重新键入EditText字段时,重新启动Periodic消耗文本.

每当用户按下ENTER键触发"最终"API调用,并停止监视用户输入到EditText字段.

设置用户在触发API调用之前必须输入的文本的最小长度,但将此最小长度与覆盖的超时值组合,以便在用户希望搜索"短"文本字符串时可以.

我确信RxJava和/或RxBindings可以支持上述要求,但到目前为止我还没有实现一个可行的解决方案.

我的尝试包括

private PublishSubject<String> publishSubject;

  publishSubject = PublishSubject.create();
        publishSubject.filter(text -> text.length() > 2)
                .debounce(300, TimeUnit.MILLISECONDS)
                .toFlowable(BackpressureStrategy.LATEST)
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(final String s) throws Exception {
                        Log.d(TAG, "accept() called with: s = [" + s + "]");
                    }
                });


       mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {

            }

            @Override …
Run Code Online (Sandbox Code Playgroud)

android rx-android rx-binding rx-java2

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

调用Games.Achievements.unlock时不显示弹出窗口

我目前的Android游戏采用了BaseGameActivity.

我的游戏采用了成就,在需要时可以解锁.

但是,我并不总是看到与解锁事件相关的PopUps.

我知道只有在你第一次解锁成就时才会出现弹出窗口.

一些弹出窗口显得很好,其他(从我游戏中的不同屏幕)永远不会出现.

我该怎么做以保证弹出窗口出现?

我有一种感觉它与此警告有关:

W/PopupManager(10725): You have not specified a View to use as content view for popups.

Falling back to the Activity content view which may not work properly in future versions
of the API. 
Use setViewForPopups() to set your content view.
Run Code Online (Sandbox Code Playgroud)

我从我的弹出窗口中没有显示的活动中调用了setViewForPopups(),但我从未见过它们.

如何调用setViewForPopups()以便整个应用程序看到上面显示的WARNING消息?

android google-play-games

11
推荐指数
4
解决办法
5851
查看次数

已弃用的方法ObjectMapper.reader(Class)的替代方法

我正在开发一个JSON解析应用程序,并希望使用ObjectReader.

我得到了对象阅读器的实例如下 -

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final ObjectReader OBJECT_READER = OBJECT_MAPPER.reader(MyType.class);
Run Code Online (Sandbox Code Playgroud)

但是OBJECT_MAPPER.reader(MyType.class);显示为已弃用.

我还有什么办法可以获得ObjectReader

java jackson

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

如何在没有Actionbar的应用程序中使用Mapbox PlacePicker活动?

我正在研究当前Android应用程序中优秀的Mapbox库.

我试图整合这个问题时遇到过这个问题PlacePickerActivity.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.hide()' on a null object reference
        at com.mapbox.mapboxsdk.plugins.places.picker.ui.PlacePickerActivity.onCreate(PlacePickerActivity.java:65)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
Run Code Online (Sandbox Code Playgroud)

我的应用程序风格如下: -

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>
Run Code Online (Sandbox Code Playgroud)

我使用的版本是: -

// MAPBOX
implementation "com.mapbox.mapboxsdk:mapbox-android-sdk:$mapBoxSdkVersion"
implementation "com.mapbox.mapboxsdk:mapbox-android-plugin-traffic:$mapBoxTrafficVersion"
implementation "com.mapbox.mapboxsdk:mapbox-android-plugin-places:$mapBoxPlacesVersion"

    mapBoxSdkVersion = "6.8.1"
    mapBoxTrafficVersion = "0.6.0"
    mapBoxPlacesVersion = "0.6.0"
Run Code Online (Sandbox Code Playgroud)

我配置我的工具栏如下: -

   /**
     * @param toolbar
     */
    private void manageToolbar(final Toolbar toolbar) {
        mToolbar …
Run Code Online (Sandbox Code Playgroud)

android-toolbar mapbox-android

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

调用ActivityManager.clearApplicationUserData()后是否可以重新启动Android App

我当前的 Android 应用程序需要调用

 ActivityManager.clearApplicationUserData()
Run Code Online (Sandbox Code Playgroud)

模拟用户清理App存储

哪个工作正常。

调用的一个副作用clearApplicationUserData()是应用程序(可以理解)关闭。

这会给用户带来糟糕的体验。

一旦我调用了 ,我就很难重新启动我的应用程序clearApplicationUserData()

我曾尝试将startActivity,Alarm ManagerPending Intent, Foreground/Background服务一起使用。

什么都行不通。

是否无法重新启动已调用的 Android 应用程序clearApplicationUserData()

android android-intent

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

如何在自定义 Kotlin DSL 上执行使用规则

我正在按照以下示例调查 Kotlin DSL:-

https://github.com/zsmb13/VillageDSL

我对如何对 DSL 公开的所有属性实施使用规则感兴趣。

以下面的例子为例:-

val v = village {
    house {
        person {
            name = "Emily"
            age = 31
        }
         person {
            name = "Jane"
            age = 19
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想强制执行一个规则,阻止 DSL 的用户能够输入重复的属性,如下所示

val v = village {
    house {
        person {
            name = "Emily"
            name = "Elizabeth"
            age = 31
        }
         person {
            name = "Jane"
            age = 19
            age = 56
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用 Kotlin 合同,例如

contract { callsInPlace(block, EXACTLY_ONCE) }
Run Code Online (Sandbox Code Playgroud)

但是,这些只允许在顶级函数中使用,并且在遵循 …

dsl kotlin

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