小编rol*_*ndl的帖子

java.lang.NoClassDefFoundError $$在Kotlin内联$ forEach $ lambda $ 1

我目前正在使用版本1.1.1中的Kotlin开发Android应用程序

在我的代码中,我有几种forEach结构的叠加,以便阅读几个MutableListMutableMap.

不幸的是,我的应用程序崩溃了以下堆栈跟踪:

java.lang.NoClassDefFoundError:com.package.fragment.ReminderAddFragment $ onRetrieveBusinessObjects $$ in.sach.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275)in com.smartnsoft.droid4me.app.Droid4mizer inlined $ forEach $ lambda $ 1 .onRetrieveBusinessObjects(Droid4mizer.java:552)位于com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal(Droid4mizer.java:606)的com.smartnsoft.droid4me.app.Droid4mizer.access $ 000(Droid4mizer.java:46)at com .smartnsoft.droid4me.app.Droid4mizer $ 1.run(Droid4mizer.java:197)at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:423)at java.util.concurrent.FutureTask.run(FutureTask. java:237)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)at java.lang.Thread.run(Thread的.java:818)

这里的代码

tutorialCategories.forEach { (_, _, _, _, _, tutorials) ->
  tutorials.forEach { tutorial ->
    if (tutorial.id == simpleReminderFromExtra.tutorialId)
    {
      //...
      val mapOfreminders = mutableMapOf<Int, MutableList<Reminder>>()
      val reminders = ReminderServices.getReminderByTutorialId(simpleReminderFromExtra.tutorialId)

      reminders.forEach { reminder ->
        //...
      }

      mapOfreminders.forEach { _, finalReminders ->
        //...

        finalReminders.forEach …
Run Code Online (Sandbox Code Playgroud)

lambda android kotlin

33
推荐指数
2
解决办法
3466
查看次数

Android 10 / API 29:如何将手机连接到配置的网络?

我正在开发一个应用程序,用户必须在其中执行以下步骤:

  1. 将手机连接到wifi;
  2. 将手机从连接的对象连接到专用热点。

当用户连接到所连接对象的专用热点时,应用程序会执行一些 HTTP 请求以对其进行配置。然后,我想将应用程序自动重新连接到步骤 1 的全局 wifi。

从 API 21 到 API 28,此功能非常容易实现,因为我知道 SSID,我也想重新连接手机。它可以通过几行代码完成:

private fun changeCurrentWifiNetworkLegacy(ssidToConnect: String) {
    val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

    var ssidIdentifier: Int? = null

    wifiManager.configuredNetworks?.forEach { config ->
        Log.d("SSID", config.SSID)

        if (config.SSID == "\"${ssidToConnect}\"") {
            ssidIdentifier = config.networkId
        }
    }

    ssidIdentifier?.let { id ->
        wifiManager.enableNetwork(id, true)
    }
}
Run Code Online (Sandbox Code Playgroud)

在 API 29 上,根据这篇文章,这个简单的代码不再起作用:https : //developer.android.com/about/versions/10/privacy/changes#configure-wifi

根据文章,现在,我应该使用 2 个类:WifiNetworkSpecifier和/或WifiNetworkSuggestion.

不幸的是,我找不到使用这些类的工作示例来将用户连接到以前配置的 SSID。

有人已经做到了吗?

预先感谢您的帮助。

android android-wifi android-connectivitymanager

15
推荐指数
2
解决办法
8329
查看次数

Android 4.2.2(wiko)上的NoClassDefFoundError:android.support.design.internal.NavigationMenu

我正在尝试使用Android支持设计库(版本23.0.1)和类NavigationMenu(我将此类用作布局中的XML标记).

当我在Android 4.3上的三星或Android 5.x或6.0上的Nexus上执行我的应用程序时,一切运行良好,但是当我在Android 4.2.2上的Wiko Rainbow上执行应用程序时,它会崩溃并出现以下异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{applicationId/package.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>
[...]
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class <unknown> 
Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
        at android.view.LayoutInflater.createView(LayoutInflater.java:587)
[...]
Caused by: java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenu
        at android.support.design.widget.NavigationView.<init>(NavigationView.java:99)
        at android.support.design.widget.NavigationView.<init>(NavigationView.java:92)
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
        at android.view.LayoutInflater.createView(LayoutInflater.java:587)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
[...]
Run Code Online (Sandbox Code Playgroud)

这个错误让我想起了几个月前开发人员在Android 4.2.2上使用某些Wiko和Samsung手机上的appcompat-v7库.

错误是:

java.lang.NoClassDefFoundError:   android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:914)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:964)
at …
Run Code Online (Sandbox Code Playgroud)

android proguard android-proguard androiddesignsupport android-support-design

10
推荐指数
2
解决办法
5080
查看次数

FirebaseApp初始化在Android Instant应用程序中失败

我目前正在开发一个现有的Android应用程序,以便创建即时应用程序版本.

我的Android Studio现在分为几个模块:

  • 业务对象模块(这是一个库)
  • base -feature-模块
  • moduleA -feature-模块
  • app模块(手机/平板电脑模块)
  • 即时模块(即时应用程序模块)

我的即时应用程序模块可以在手机/平板电脑上编译和启动,但每次因Firebase问题而崩溃.我在logcat中有以下消息:

I/FirebaseInitProvider:FirebaseApp初始化失败

根据文档,Firebase库与Instant Apps兼容,但我很确定我没有将google-services.json文件移动到我项目中的正确位置......

在这里我做了什么:

  1. 我将以下类路径依赖项定义到Android Studio项目的build.gradle文件中:classpath'com.google.gms:google-services:3.1.1'

  2. 我把google-services.json文件放到我的模块库中(因为文档要求它)

现在,如果我尝试将插件(应用插件:'com.google.gms.google-services')应用到基本模块的build.gradle文件中,我无法编译.我有以下消息:

错误:任务':base:processGooglePlayProductionDebugFeatureGoogleServices'的执行失败.

>找不到包名称'com.mycompany.myapp.base'的匹配客户端

实际上,定义到google-services.json文件中的包名称是应用程序使用的一个(因为根据文档,基本库不能与安装的Android应用程序具有相同的包名称.

我还尝试将插件应用到已安装应用程序的build.gradle文件中,并应用到即时应用程序模块中,将google-services.json文件保留到基本模块中.应用程序编译,但我有日志:"FirebaseApp初始化失败".

所以我尝试将google-services.json文件移动到我的即时应用模块中,但我仍然有日志:"FirebaseApp初始化失败"

我还试图强制初始化从FirebaseApp类调用静态方法initializeApp,但日志仍然存在.

我无法在网上找到实施的例子.实际上,Google Sample存储库不使用google-services.json文件.

预先感谢您的帮助 !

编辑:这里是我的模块的依赖项:

我的base -feature-模块的依赖关系:

  implementation project(':businessobject')
  feature project(':moduleA')
  application project(':app')
Run Code Online (Sandbox Code Playgroud)

我的moduleA -feature-模块的依赖关系:

api project(':base')
api project(':businessobject')
Run Code Online (Sandbox Code Playgroud)

我的应用模块(手机/平板电脑模块)的依赖关系:

implementation (project(':base'))
implementation (project(':businessobject'))
implementation (project(':moduleA'))
Run Code Online (Sandbox Code Playgroud)

我的即时模块(即即时应用模块)的依赖关系:

implementation project(':base')
implementation project(':businessobject')
implementation project(':moduleA')
Run Code Online (Sandbox Code Playgroud)

android firebase google-play-services android-instant-apps

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

在UWP应用程序中自引用泛型类型约束和XAML

我目前正在开发一个UWP应用程序,其中我在PCL中使用自引用泛型类型约束.

这里描述了PCL的类.

首先,实现自引用泛型类型约束的类(此类也实现new()约束)

public abstract class A<T> 
  where T : A<T>, new()
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个扩展Windows.UI.Xaml.Controls.Page该类的基类:

public abstract class MyPage<T> : Page
  where T : A<T>, new()
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

我还有一个扩展Windows.UI.Xaml.Application类的基类:

public abstract class MyApplication<T> : Application
  where T : A<T>, new()
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

我的UWP课程以下列方式扩展了上述PCL的类...

首先,我有一个B扩展类的类A:

public sealed class B : A<B>
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

然后,我有App扩展该类的类MyApplication.csharp文件:

public sealed partial class App : MyApplication<B> …
Run Code Online (Sandbox Code Playgroud)

c# generics xaml uwp

6
推荐指数
1
解决办法
1418
查看次数

如何知道 DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS 更新可用性的起源处的 AppUpdateType?

我目前正在致力于实施 Google 新的“应用内更新”库。

根据文档,我们可以向用户提示“灵活”或“即时”的UI。在这两种情况下,它将启动更新的下载(阻止或不阻止)。

如果在下载过程中我终止了我的应用程序并在下载结束之前重新启动它,那么当我询问“更新可用性”时,API 会给我答案UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS

文档仅在立即更新的情况下提到此可用性,因此我们必须使用以下代码恢复全屏 UI:

appUpdateManager.startUpdateFlowForResult(appUpdateInfo, IMMEDIATE, this, 1000)
Run Code Online (Sandbox Code Playgroud)

问题是,当下载灵活更新时,我也有这种可用性,在这种情况下,我不想启动全屏下载 UI,因为它是灵活更新...

UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS当 API 返回可用性时,有什么方法可以知道我们是处于灵活更新还是立即更新状态?

预先感谢您的帮助!

android in-app-update

6
推荐指数
1
解决办法
1663
查看次数

UrlConnection:SSLProtocolException:SSL握手中止:ssl = 0x631b60c8:SSL库失败,通常是协议错误

我目前正在将Android从HttpClient迁移到UrlConnection。我至少在Android 4.2.2上遇到了一些问题。

我试图调用的URL是一个https URL,我必须使用客户端证书。

基于此博客文章,我编写了以下代码:

// We create the client PKCS12 certificate
final KeyStore clientCertificateKeyStore = KeyStore.getInstance("PKCS12");
try
{
  clientCertificateKeyStore.load(this.clientCertificatePayload, this.clientCertificatePassword.toCharArray());
}
finally
{
  this.clientCertificatePayload.close();
}

final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
keyManagerFactory.init(clientCertificateKeyStore, clientCertificatePassword.toCharArray());

final KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();
sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);
Run Code Online (Sandbox Code Playgroud)

然后在我的代码中,我使用sslContext变量将SSL Factory设置为my httpURLConnection

((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(sslContext.getSocketFactory()); 
Run Code Online (Sandbox Code Playgroud)

这段代码可在Android 6.0.1的Nexus 5上完美运行,但在Android 4.2.2的Wiko Rainbow上则无法运行。实际上,将sslSocketFactory设置为my之后httpURLConnection,调用该getOutputStream方法时会出现以下异常:

Caused by: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x631b60c8: Failure in SSL library, usually a protocol error
error:14077410:SSL …
Run Code Online (Sandbox Code Playgroud)

java ssl https android urlconnection

5
推荐指数
0
解决办法
3277
查看次数

Robolectric和AndroidX ClassNotFoundException android.support.v4.app.NotificationCompat $ Style

我正在尝试使用Robolectric,以便在不使用模拟器或设备的情况下对Android应用程序中的某些类进行单元测试。例如,我想对Dao类进行单元测试,但是我总是有以下异常:

造成原因:java.lang.ClassNotFoundException:android.support.v4.app.NotificationCompat $ Style

这是fullstackstrace:

java.lang.NoClassDefFoundError:com / pcg.ape.AudiencePlus.a(android.support/v4/app/NotificationCompat$Style)com.hager处com.pcg.ape.AudiencePlus.initialize(Unknown Source) org.robolectric.android.internal.AndroidEnvironment.lambda $ installAndCreateApplication $ 0(AndroidEnvironment.java:253)处的app.AppApplication.onCreate(AppApplication.kt:360)在org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:75) )位于org.robolectric.android.internal.AndroidEnvironment.installAndCreateApplication(AndroidEnvironment.java:253)位于org.robolectric.android.internal.AndroidEnvironment.setUpApplicationState(AndroidEnvironment.java:149)位于org.robolectric.RobolectricTestRunner.beforeTest(Robolectric。 java:298),网址为org.robolectric.internal.SandboxTestRunner $ 2。在org.robolectric.internal.bytecode.Sandbox.lambda $ runOnMainThread $ 0(Sandbox.java:89)处的lambda $ evaluate $ 0(SandboxTestRunner.java:247)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(Thread.java:745) )由以下原因导致:java.lang.ClassNotFoundException:android.support.v4.app.NotificationCompat $ Style在org.robolectric.internal.bytecode.SandboxClassLoader.getByteCode(SandboxClassLoader.java:164)在org.robolectric.internal.bytecode.SandboxClassLoader org.org.robolectric.internal.bytecode.SandboxClassLoader.lambda $ findClass $ 0(SandboxClassLoader.java:112)处的.maybeInstrumentClass(SandboxClassLoader.java:119)在组织处。java.lang.ClassLoader.loadClass(ClassLoader.java:424)上的org.robolectric.internal.bytecode.SandboxClassLoader.findClass(SandboxClassLoader.java:111)上的robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:53) .lang.ClassLoader.loadClass(ClassLoader.java:357)...还有16个

请注意,AudiencePlus库是一个用于接收推送通知的库(例如OneSignal)。

该项目使用androidX。这里有一些配置元素:

gradle.properties文件包含以下几行:

android.enableJetifier=true
android.useAndroidX=true

android.enableUnitTestBinaryResources=true
Run Code Online (Sandbox Code Playgroud)

build.gradleapp模块的文件包含以下几行:

android
{
  defaultConfig
  {
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    testOptions
    {
      unitTests
      {
        includeAndroidResources = true
      }
    }
  }
}

dependencies
{
  testImplementation "junit:junit:4.12"
  testImplementation "androidx.test:runner:1.1.1"
  testImplementation "androidx.test.ext:junit-ktx:1.1.0"
  testImplementation "org.robolectric:robolectric:4.2"
}
Run Code Online (Sandbox Code Playgroud)

这是我要测试的课程:

package com.hager.ecat.room.ecat.dao

import androidx.test.ext.junit.runners.AndroidJUnit4 …
Run Code Online (Sandbox Code Playgroud)

junit android classnotfoundexception robolectric

5
推荐指数
0
解决办法
243
查看次数

如何使用 Gradle 更改 Android 风味应用程序的包名称?

我目前正在将一个非常旧的 Android 应用程序从 Eclipse 迁移到 Android Studio。

在我的应用程序的旧版本中,我能够使用 Ant 脚本创建一些“风味”。这个脚本的目的是用不同的包名和不同的资源(drawable 等)复制 Eclipse 项目。

我已将项目迁移到 Android Studio,删除了 Ant 脚本并创建了一些风格。

但是现在,我有一些问题需要反序列化 - 在新版本的应用程序中 - 在旧版本的应用程序中序列化的对象。

这里是 stackstrace 的一部分: Caused by: java.lang.ClassNotFoundException: com.company.app.flavor.bo.Player

在旧版本中,每种口味都有自己的包名:

  • com.company.app
  • com.company.app.flavor

在这个新版本中,代码结构是com.company.app.flavor我和 Gradle 一起玩的,以产生applicationId对味道的好处。

因此,applicationIdfor 风格是正确的,但类的包名称似乎尊重项目结构,因此,我无法将带有包的原始对象反序列com.company.app.flavor.bo.Player化为 object com.company.app.bo.Player

如果我用com.company.app.flavor它更改项目的结构,它将适用于风味,但不适用于带有applicationId com.company.app.

那么,有没有办法,使用 Gradle 或其他工具(proguard?)来更改applicationId和包名称的风味?

预先感谢您的帮助。

java android gradle android-productflavors

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

Android:如何选择RotateAnimation的旋转方向?

我目前正在开发一个应用程序,其中我想用箭头指示一个路径(它像指南针一样工作).

为了将箭头移动到好的方向,我使用了这个RotateAnimation类.它工作得很好但是当初始度数位置远离最终度数位置时,旋转不会选择更快的方式.

在此视频中,您可以看到以下行为:https://youtu.be/vypZni_1s3I

这里是用户单击按钮"02"时执行的代码:

RotateAnimation rotateAnimation = new RotateAnimation(355f, 8f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration(3000);
rotateAnimation.setFillAfter(true);
test.startAnimation(rotateAnimation);
Run Code Online (Sandbox Code Playgroud)

这里是用户单击按钮"03"时执行的代码:

RotateAnimation rotateAnimation = new RotateAnimation(8f, 350f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration(3000);
rotateAnimation.setFillAfter(true);
test.startAnimation(rotateAnimation);
Run Code Online (Sandbox Code Playgroud)

正如您在视频中看到的那样,旋转不会选择更快的方式.在第一个动画中,更快的方法是顺时针旋转(但系统选择逆时针旋转),在第二个动画中,更快的方法是逆时针旋转(但系统选择顺时针旋转).

是否有解决方案或技巧迫使系统选择更快的方式从A点旋转到B点?

animation android rotation android-animation

0
推荐指数
1
解决办法
4260
查看次数

Room:如何实现几个一对一的关系?

我可以找到有关如何使用 Room 实现一对一关系的几个示例和一个很好的文档,但我找不到任何有关如何实现多个一对一关系的文档。

这是基于本文的示例。

如果 1 只狗有 1 个主人,我可以创建一个Dog实体:

@Entity
data class Dog(
    @PrimaryKey val dogId: Long,
    val dogOwnerId: Long,
    val name: String,
    val cuteness: Int,
    val barkVolume: Int,
    val breed: String
)
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个Owner实体:

@Entity
data class Owner(@PrimaryKey val ownerId: Long, val name: String)
Run Code Online (Sandbox Code Playgroud)

现在,我可以创建一个DogAndOwner数据类,以便使用 Room 检索狗及其主人:

data class DogAndOwner(
    @Embedded val owner: Owner,
    @Relation(
         parentColumn = "ownerId",
         entityColumn = "dogOwnerId"
    )
    val dog: Dog
)
Run Code Online (Sandbox Code Playgroud)

和请求:

@Transaction
@Query("SELECT * FROM Owner")
fun …
Run Code Online (Sandbox Code Playgroud)

android android-room

0
推荐指数
1
解决办法
1203
查看次数