我在更新到最新的支持库版本26.0.0时遇到此问题(https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0):
错误:(18,21)找不到与给定名称匹配的资源:attr'android:keyboardNavigationCluster'.
/.../app/build/intermediates/res/merged/beta/debug/values-v26/values-v26.xml
Error:(15, 21) No resource found that matches the given name: attr 'android:keyboardNavigationCluster'.
Error:(18, 21) No resource found that matches the given name: attr 'android:keyboardNavigationCluster'.
Error:(15, 21) No resource found that matches the given name: attr 'android:keyboardNavigationCluster'.
Error:(18, 21) No resource found that matches the given name: attr 'android:keyboardNavigationCluster'.
Error:Execution failed for task ':app:processBetaDebugResources'.
Run Code Online (Sandbox Code Playgroud)
com.android.ide.common.process.ProcessException:无法执行aapt
该文件来自支持库:
<style name="Base.V26.Widget.AppCompat.Toolbar" parent="Base.V7.Widget.AppCompat.Toolbar">
<item name="android:touchscreenBlocksFocus">true</item>
<item name="android:keyboardNavigationCluster">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我们使用以下版本:
ext.COMPILE_SDK_VERSION = 26
ext.BUILD_TOOLS_VERSION = "26.0.1"
ext.MIN_SDK_VERSION = 17
ext.TARGET_SDK_VERSION = …Run Code Online (Sandbox Code Playgroud) android android-appcompat android-support-library android-gradle-plugin
更新3. KOTLIN 现在正在为ANDROID开发提供正式支持.通过GOOGLE.YAAAAAAAAS!
更新2:从长远来看,看起来JetBrains真的致力于支持Kotlin for Android.我是一个快乐的kotlin用户:).
更新:来自JetBrains的Hadi Hariri 提到他们将发布有关此主题的一些信息.一旦他们这样做,我会更新这篇文章.
===下一个被弃用的东西===
谷歌刚刚发布了即将推出的Android N的预览版,其中包含一些有趣的功能,最值得注意的是部分Java 8语言支持.这是可能的,因为Google正在开发新的Jack工具链.
使用javac或kotlinc的当前工具链:
javac(.java- > .class) - > dx(.class- > .dex)
kotlinc(.kt- > .class) - > dx(.class- > .dex)
新杰克工具链:
杰克(.java- > .jack- > .dex)
我假设谷歌将推动杰克成为Android开发的默认工具链.更新:Jack现已弃用.亚斯. …
我正在尝试使用Glide从本地存储加载图像但没有成功.
Glide.with(mContext)
.load(pictureUri) // Uri of the picture
.transform(new CircleTransform(..))
.into(profileAvatar);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
java.lang.Exception: Failed to load model: '/storage/emulated/0/DCIM/Camera/IMG_20150831_180900.jpg'
at com.bumptech.glide.request.GenericRequest.onSizeReady(GenericRequest.java:441)
at com.bumptech.glide.request.target.ViewTarget$SizeDeterminer.getSize(ViewTarget.java:211)
at com.bumptech.glide.request.target.ViewTarget.getSize(ViewTarget.java:100)
at com.bumptech.glide.request.GenericRequest.begin(GenericRequest.java:272)
at com.bumptech.glide.manager.RequestTracker.resumeRequests(RequestTracker.java:83)
at com.bumptech.glide.RequestManager.resumeRequests(RequestManager.java:180)
at com.bumptech.glide.RequestManager.onStart(RequestManager.java:203)
at com.bumptech.glide.manager.ActivityFragmentLifecycle.onStart(ActivityFragmentLifecycle.java:50)
at com.bumptech.glide.manager.SupportRequestManagerFragment.onStart(SupportRequestManagerFragment.java:135)
at android.support.v4.app.Fragment.performStart(Fragment.java:1986)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1179)
at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1996)
at android.support.v4.app.FragmentController.dispatchStart(FragmentController.java:176)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:517)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:6006)
at android.app.Activity.performRestart(Activity.java:6063)
at android.app.Activity.performResume(Activity.java:6068)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2975)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud) 我想RealmObject从它"分离"一个Realm,这意味着我希望能够RealmObject从一个方法返回一个并且能够在我close的Realm实例之后使用它.
像这样的东西:
public Person getPersonWithId(final Context context, final String personId){
Realm realm = Realm.getInstance(context);
Person person = realm.where.....;
realm.close();
return person;
}
Run Code Online (Sandbox Code Playgroud)
目前getPersonWithId(mContext, personId).getName()将按预期返回错误.
拥有一个托管对象也意味着该对象是不可变的(无法修改),因此任何更新对象的方法person.setName(String name)都会因为该对象是一个托管对象而失败.
我希望会有像这样的方法 Person person = person.detachFromRealm();
有谁知道这个问题的解决方案/解决方法?
在我的Android项目中,我使用realm作为我的数据存储引擎.我喜欢它!
我也使用RxJava,因为它使"线程化"变得如此简单,我真的很喜欢整个"反应性思维".我喜欢它!
我使用MVP模式+一些"清洁架构"的想法来构建我的应用程序.
我Interactors是唯一知道的人Realm.我在Observable的帮助下公开数据,如下所示:
@Override
public Observable<City> getHomeTown() {
final Realm realm = Realm.getDefaultInstance();
return realm.where(City.class).equalTo("name", "Cluj-Napoca").findAllAsync().asObservable()
.doOnUnsubscribe(new Action0() {
@Override
public void call() {
realm.close();
}
})
.compose(new NullIfNoRealmObject<City>());
}
Run Code Online (Sandbox Code Playgroud)
问题是我doOnUnsubscribe的副作用被调用之前Realm可以做它的事情,处理暴露的observable:
Caused by: java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.
at io.realm.BaseRealm.checkIfValid(BaseRealm.java:344)
at io.realm.RealmResults.removeChangeListener(RealmResults.java:818)
at io.realm.rx.RealmObservableFactory$3$2.call(RealmObservableFactory.java:137)
at rx.subscriptions.BooleanSubscription.unsubscribe(BooleanSubscription.java:71)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:124)
at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:113)
at rx.Subscriber.unsubscribe(Subscriber.java:98)
at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:150)
at …Run Code Online (Sandbox Code Playgroud) 我有以下RETROFIT API:
@POST("/payments")
Observable<Response> saveCreditCard(@Body CreditCard creditCard)
Run Code Online (Sandbox Code Playgroud)
CreditCard是一个RealmObject.
当我尝试使用我的API方法时:
CreditCard card = realm.createObject(CreditCard.class);
card.setWhateverField(...);
...
mApi.saveCreditCard(card)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
> retrofit.RetrofitError: com.fasterxml.jackson.databind.JsonMappingException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they where created.
System.err? at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:400)
System.err? at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
System.err? at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265)
System.err? at retrofit.RxSupport$2.run(RxSupport.java:55)
System.err? at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
System.err? at java.util.concurrent.FutureTask.run(FutureTask.java:237)
System.err? at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
System.err? at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
System.err? at retrofit.Platform$Android$2$1.run(Platform.java:142)
System.err? at java.lang.Thread.run(Thread.java:818)
System.err? Caused by: java.lang.AssertionError: com.fasterxml.jackson.databind.JsonMappingException: Realm access …Run Code Online (Sandbox Code Playgroud) 我们有一个包含4个模块的gradle项目:1个库模块和3个Android应用程序.要构建我们的应用程序,我们使用circleCI.我们还根据本指南禁用了circleCI构建的预定义.
在我将Instabug添加到我们的一个项目之前,一切都很棒.从那以后,我们一直在达到circleCI 4GB的限制.最重要的是,将Instabug作为依赖项的项目将启动preDexgradle任务,无论如何.要开始新的构建,我们使用以下命令:./gradlew assembleDebug -PpreDexEnable=false.
使用Instabug的项目在构建期间会收到一些警告,如下所示:
忽略没有关联的EnclosingMethod属性的匿名内部类(com.instabug.library.b)的InnerClasses属性.这个类可能是由一个没有以现代.class文件格式为目标的编译器生成的.建议的解决方案是使用最新的编译器从源代码重新编译类,而不指定任何"-target"类型选项.忽略此警告的后果是,对此类的反射操作将错误地指示它不是内部类.
我假设由于为"Instabug项目"启动的preDex任务,我们达到了4 GB的限制.
有没有人知道发生了什么?
编辑:gradle文件
root build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'de.hannesstruss:godot:0.2'
classpath 'com.github.ben-manes:gradle-versions-plugin:0.11.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
apply plugin: 'de.hannesstruss.godot'
apply plugin: 'com.github.ben-manes.versions'
apply …Run Code Online (Sandbox Code Playgroud) 我的应用程序有一个智能手机布局和一个平板电脑布局
我想为两者large和xlarge设备使用相同的布局.
我想支持使用API 10及更高版本的设备,因此使用sw<N>dp是不可能的.
如果不在两个文件夹中放置相同的xml文件,我该怎么做呢.我不想让代码重复.这违反任何体面的编程原则.:)
如何检查两个Spanned对象是否相等(它们具有相同的内容和跨度)?我宁愿不执行该equals(Spanned span)方法。:)
我使用Retrofit与REST API交互,RxJava操作我收到的数据.
在下面的代码片段中,我进行了API调用,并使用map运算符保存我收到的数据,然后继续对流进行其他操作.
retrofitApi.registerDevice(mDevice)
.map(new Func1<Device, Device>() {
@Override
public Device call(Device device) {
// The only purpose of the map() operator
// is to save the received device.
magicBox.saveDeviceId(device.getId());
return device;
}
})
.otherOperations()...
Run Code Online (Sandbox Code Playgroud)
我的问题是:这个工作有更好的操作员吗?我觉得我误用了map操作员.
我有一个List<String> ids,我想要所有FooRealmObject具有 ID 字段的 s 包含在ids列表中。
我可以通过 ID 迭代ids列表和查询对象,但我希望有一个单行代码,例如:
realm.where(Foo.class).in("id", ids).findAll();
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?