因此,在尝试运行我的项目时,我不断收到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) 因此,我试图使用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) 正如标题所示,我目前正在将我的应用程序更新到 SDK 30,但在ACCESS_BACKGROUND_LOCATION权限方面遇到问题。请求权限后,用户将进入应用程序位置权限设置,并获得 4 个选项:
除“始终允许”之外的所有选择都不会授予权限并-1在回调函数grantResults IntArray内部返回 a onRequestPermissionsResult()。为什么?这非常令人困惑。该命名会让人们相信该权限将被授予,并且只有当应用程序处于焦点时才会发出后台权限请求。是否可以从选项中删除“仅在使用应用程序时允许”选项?我怎样才能解决这个问题??我只看到这些选择让用户感到困惑,因为除非他们选择“始终允许”,否则不会授予权限。
我正在尝试检索仅在到达日期和机场匹配时返回航班数据的数据.我似乎无法找到最佳解决方案.我只能在机场或抵达日期相同的情况下提取数据,而不是两者(只能使用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上的数据呢?
我只想在登录屏幕上显示我的版本名称,但是,它始终返回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)
但是,构建字符串始终为空。是什么赋予了?
我正在获取一个包含通用成员的 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从而导致循环。
我最近从 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 时(显然)是相同的。我究竟做错了什么?
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].我的代码出了什么问题?