Nativescript:错误:java.lang.NoClassDefFoundError:使用 WorkManager 时的 java.time.Duration

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

嘿,我正在 Android 中使用 Nativesript 6.5 + Angular 实现一个每小时请求后台位置的服务。为此,我使用 androidx.work.PeriodicWorkRequest。以下代码在 API 级别高于 26 的设备上运行良好。

 @JavaProxy('com.tns.BackgroundLocationService')
 export class BackgroundLocationService extends (<any>androidx).work.Worker {
     constructor(context, params) {
         super(context, params);
         return global.__native(this);
         }
  public doWork() {
   // some work here for getting the geolocation

       return (<any>androidx).work.ListenableWorker.Result.success();
   }
   public onStopped() {
  console.log("onStopped from MyWorker !!!")
 }
}

为了运行 Worker,我使用以下 Typescript 类:

@Injectable()
export class MyWorkerHandler {

constructor() {
}

getJobConstrains() {
    return (new (<any>androidx).work.Constraints.Builder()).build();
}

getWorkRequest() {
    let constrains = this.getJobConstrains();
    return (new (<any>androidx).work.PeriodicWorkRequest.Builder(java.lang.Class.forName("com.tns.BackgroundLocationService"), 15, java.util.concurrent.TimeUnit.MINUTES))
        .setConstraints(constrains)        
        .build()
}

enqueue() {
    let worker = this.getWorkRequest();        
    ((<any>androidx).work.WorkManager).getInstance()
      .enqueueUniquePeriodicWork("sediDomaChallenger", (<any>androidx).work.ExistingPeriodicWorkPolicy.REPLACE, worker); 
}
}

如上所述,此代码在 26 以上的版本中运行良好。但是在具有较低 SDK 的设备上运行它时,我收到以下错误:

JS: ERROR Error: Uncaught (in promise): Error: java.lang.NoClassDefFoundError: java.time.Duration

我确实在stackoverflow上找到了这个线程无法在PeriodicWorkRequest类(WorkManager)中导入java.time.Duration,但从我所看到的来看,我正在版本29上编译我的代码。当我使用时,WorkManager适用于每个Android版本一次性工作请求。

你能告诉我我做错了什么吗?我认为这与配置 NS 有关,或者也许我不太了解 Android,归根结底我是一名 Web 开发人员:)

提前Tnx <3

android nativescript angular2-nativescript nativescript-angular
1个回答
0
投票

java.time 仅在 Android 8 (api 26) 中添加 您可以通过 coreLibraryDesugaring 使其在较低版本中可用

编辑你的build.gradle:

compileOptions {
    coreLibraryDesugaringEnabled true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

并添加此依赖项:

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
    ..

如果它不能像我的项目一样立即工作,请执行构建->清理项目+重建项目

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