小编Spe*_*ake的帖子

错误:任务执行失败':app:transformResourcesWithMergeJavaResForDebug'

因此,在尝试运行我的项目时,我不断收到gradle构建错误.我搜索了其他解决方案,有人说添加:

packagingOptions {
    exclude 'META-INF/NOTICE'
}
Run Code Online (Sandbox Code Playgroud)

到我的应用程序的gradle.build将解决问题,但是,它没有.这是我的应用程序的gradle.build目前的样子.

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.google.android.gms:play-services:8.3.0'
    compile 'com.google.android.gms:play-services-ads:8.3.0'
    compile 'com.google.android.gms:play-services-identity:8.3.0'
    compile 'com.firebase:firebase-client-android:2.3.1'
}

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "com.example.j.airportmeet"
        minSdkVersion 18
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

    packagingOptions {
        exclude 'META-INF/NOTICE'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

完整的错误是这样的:

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate …
Run Code Online (Sandbox Code Playgroud)

android build.gradle android-gradle-plugin

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

模拟Jetpack ViewModel,用于使用Dagger2(Robolectric)进行单元测试

因此,我试图使用Robolectric为我的Activity编写单元测试,但是我不知道如何提供一个模拟的视图模型,以查看如何在类中直接实例化我的vm。这是由于以下事实:jetpack的生命周期感知ViewModel需要实例化Provider类。因此,我实质上是在注入自定义提供程序,然后使用它来创建我的ViewModel。我看过其他示例,但它们似乎都非常混乱。我该如何实现?

class ActivityEpisodeList : AppCompatActivity() {

        @Inject
        lateinit var vmFactory: ViewModelProvider.Factory

        private lateinit var vm: ActivityViewModel


        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_episode_list)

            MvvmDaggerApp.get(this).appComponent.inject(this)

            vm = ViewModelProviders.of(this, vmFactory)[ActivityViewModel::class.java]
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我创建ViewModel的方式:

@Module
abstract class ViewModelModule {

    @Binds
    internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory

    @Binds
    @IntoMap
    @ViewModelKey(ActivityViewModel::class)
    internal abstract fun postListViewModel(viewModel: ActivityViewModel): ViewModel

}


@Singleton
class ViewModelFactory @Inject constructor(private val viewModels: MutableMap<Class<out ViewModel>, Provider<ViewModel>>) : ViewModelProvider.Factory {

    override fun <T : ViewModel> create(modelClass: Class<T>): T = viewModels[modelClass]?.get() as T
}

@Target(AnnotationTarget.FUNCTION, …
Run Code Online (Sandbox Code Playgroud)

android mvvm dagger-2 android-jetpack

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

Android 11后台位置权限“仅在使用应用程序时允许”不授予权限

正如标题所示,我目前正在将我的应用程序更新到 SDK 30,但在ACCESS_BACKGROUND_LOCATION权限方面遇到问题。请求权限后,用户将进入应用程序位置权限设置,并获得 4 个选项:

  • 允许所有时间
  • 仅在使用应用程序时允许
  • 每次都问
  • 否定

除“始终允许”之外的所有选择都不会授予权限并-1在回调函数grantResults IntArray内部返回 a onRequestPermissionsResult()。为什么?这非常令人困惑。该命名会让人们相信该权限将被授予,并且只有当应用程序处于焦点时才会发出后台权限请求。是否可以从选项中删除“仅在使用应用程序时允许”选项?我怎样才能解决这个问题??我只看到这些选择让用户感到困惑,因为除非他们选择“始终允许”,否则不会授予权限。

android android-permissions

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

查询中的Firebase多个WHERE子句

我正在尝试检索仅在到达日期和机场匹配时返回航班数据的数据.我似乎无法找到最佳解决方案.我只能在机场或抵达日期相同的情况下提取数据,而不是两者(只能使用equalTo()一次).这是我当前的Java代码:

Firebase ref = mFirebaseRef.child(FirebaseReference.CHILD_FLIGHTS);

Query queryRef = ref.orderByChild("airport").equalTo(getAirport());

queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        System.out.println(TAG + " datasnapshot is equal to " + dataSnapshot);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是数据本身:

{
   "flight":{
      "1ddf3c02-1f2e-4eb7-93d8-3d8d4f9e3da2":{
         "airport":"Gothenburg, Sweden - Landvetter (GOT)",
         "arrivalDate":"2016-06-21",
         "arrivalTime":"20:58",
         "code":"GOT",
         "departureDate":"2016-06-23",
         "departureTime":"20:58"
      },
      "c2c86e54-b4d0-4d83-934b-775a86f0a16c":{
         "airport":"Gothenburg, Sweden - Landvetter (GOT)",
         "arrivalDate":"2016-06-21",
         "arrivalTime":"20:50",
         "code":"GOT",
         "departureDate":"2016-06-23",
         "departureTime":"20:50"
      }
   },
   "users":{
      "1ddf3c02-1f2e-4eb7-93d8-3d8d4f9e3da2":{
         "age":"25",
         "createdTime":"1466533088358",
         "email":"test2@test.com",
         "provider":"password",
         "sex":"M",
         "username":"user2"
      },
      "c2c86e54-b4d0-4d83-934b-775a86f0a16c":{
         "age":"25",
         "createdTime":"1466374588255",
         "email":"test1@test.com",
         "provider":"password",
         "sex":"M",
         "username":"user1"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

当前的Java代码将返回所有只有相同机场的子代码.正如您所猜测的那样,当需要对客户端进行排序的数据量远大于上述测试数据时,这是不可行的.我怎样才能更好地过滤firebase上的数据呢?

java android firebase

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

Android BuildConfig.VERSION_NAME返回null?

我只想在登录屏幕上显示我的版本名称,但是,它始终返回null。我在应用程序的gradle构建中定义了versionName,如下所示:

    defaultConfig {
    applicationId "com.maplesyrupindustries.j.airportmeet"
    minSdkVersion 19
    targetSdkVersion 24
    versionCode 7
    versionName "1.0.6"
    multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)

我在登录名的onCreate中调用它:

    String build = BuildConfig.VERSION_NAME;
    Log.e(TAG, BuildConfig.VERSION_NAME);
    tvVersion.setText("Alpha " + build);
Run Code Online (Sandbox Code Playgroud)

但是,构建字符串始终为空。是什么赋予了?

android

6
推荐指数
2
解决办法
3837
查看次数

如何使用 moshi 反序列化泛型类成员?

我正在获取一个包含通用成员的 JSON 对象(数据可以是几种不同的类型)。该类目前如下所示:

@Parcelize
data class Children<T: Parcelable>(
        @Json(name = "type") val type: String,
        @Json(name = "data") val data: T
): Parcelable
Run Code Online (Sandbox Code Playgroud)

如何使用 moshi 反序列化/映射正确的对象类型?

@Parcelize
data class Comment<T : Parcelable>(
    @Json(name = "replies") val replies: Children<T>,
    @Json(name = "count") val count: Int,
    @Json(name = "children") val childs: List<String>

) : Parcelable
Run Code Online (Sandbox Code Playgroud)

或者像这样的例子又如何呢?我应该注意的是Comment,可以采用通用参数,Comment从而导致循环。

android retrofit moshi

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

Moshi 将值反序列化为 null

我最近从 Gson 切换到 Moshi,但在解析一些 Json 时遇到问题。

{
  "access_token": "-LNe2LQ7DQH5Y2zs_W5iUumKuaUE",
  "token_type": "bearer",
  "device_id": "461f-837e-af5050c92fe9",
  "expires_in": 3600,
  "scope": "*"
}
Run Code Online (Sandbox Code Playgroud)

这是模型类:

data class AuthToken(
        @Json(name = "access_token") val accessToken: String,
        @Json(name = "token_type") val tokenType: String,
        @Json(name = "device_id") val deviceId: String,
        @Json(name = "expires_in") val expiresIn: Int,
        @Json(name = "scope") val scope: String
)
Run Code Online (Sandbox Code Playgroud)

每当我在改造客户端中切换到使用 Moshi 时,都会收到以下错误:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull
Run Code Online (Sandbox Code Playgroud)

我已将该字段设置为可为空,但它始终反序列化为空。我检查了我的改造响应,使用 Gson 或 Moshi 时(显然)是相同的。我究竟做错了什么?

android oauth-2.0 moshi retrofit2

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

在列表上进行递归时奇数返回

Erlang noob在这里,我有一个函数,它接受任何数字并将其分解为单独的列表中的数字.Ex,654 - > [6,5,4]

我的代码如下

digitize(X) when X > 0 ->
    [digitize(X div 10)| (X rem 10)];

digitize(0) ->
    [].
Run Code Online (Sandbox Code Playgroud)

然而,回报是奇怪的.对于输入654,返回将是:[[[[] | 6] | 5] | 4].我的代码出了什么问题?

erlang list

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