我刚刚开始使用依赖注入Dagger 2.当我旋转我modules,components并试图构建我的应用程序时,gradle抛出错误
Error:(4, 24) error: cannot find symbol class Generated
我挖了它,发现错误是在其中一个类中Dagger生成的DI.缺少的特定类是javax.annotation.Generated抛出错误的行是将Dagger生成的类赋予的行@Generated("dagger.internal.codegen.ComponentProcessor")
这个问题有助于找到解决方案,即javax通过将行添加compile 'org.glassfish:javax.annotation:10.0-b28'到我的gradle构建文件中来将包添加为依赖项.这导致了成功的构建.
我的问题是,为什么没有作为传递依赖添加Dagger或为什么没有其他人面对这个特定问题(我假设如此,因为我在这里找不到任何问题?
我曾经ListView在我的Android应用程序中使用,我最近切换到RecyclerView并观察到它在方向更改时引入了一些内存泄漏.经过进一步调查,原因显而易见
建立
activity托管a 的单个fragment,其实例在配置更改时保留.在fragment包含了一个RecyclerView在其布局文件中使用自定义填充adapter
钻井
只要Adapter为这两个视图中的任何一个设置了一个视图,它们就会使用适配器注册自己,以监视数据的更改并在UI上进行更新.ListView取消注册配置更改
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
...
if (mAdapter != null && mDataSetObserver != null) {
mAdapter.unregisterDataSetObserver(mDataSetObserver);
mDataSetObserver = null;
}
...
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,RecyclerView不这样做
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mItemAnimator != null) {
mItemAnimator.endAnimations();
}
mFirstLayoutComplete = false;
stopScroll();
mIsAttached = false;
if (mLayout != null) {
mLayout.onDetachedFromWindow(this, mRecycler);
}
removeCallbacks(mItemAnimatorRunner);
}
Run Code Online (Sandbox Code Playgroud)
证明
我改变了方向很多次然后进行堆转储,并使用Eclipse的MAT读取它.我确实看到我的活动有很多实例,因为 …
我换过Java的Date教学班Joda的DateTime在我的Android应用程序最近的类.我Jackson用于解析json.我在build.gradle文件中添加了以下行
compile com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.3
compile net.danlew:android.joda:2.7.1
Run Code Online (Sandbox Code Playgroud)
它破坏了我的构建.错误消息是duplicate files during packaging of APK.它还提出了以下选项
android {
packagingOptions {
exclude 'org/joda/time/format/messages_da.properties'
}
}
Run Code Online (Sandbox Code Playgroud)
在JodaTime中有很多这样的文件,如"messages_da.properties","messages_fr.properties".我相信这些用于提供基于区域设置的格式.
我的预感说不应该排除这些文件.如果那里的专家可以为此提供解决方案,那就太棒了
我有一个可以缩放和平移的自定义视图.它只是显示a path(其坐标从API获取).由于Paths作为纹理上传到GPU然后绘制,因此path可以绘制的维度的最大限制(因设备而异).我的自定义视图可以变得非常大(区域中> 30000像素)并且为了绕过限制,我一直setLayerType(LAYER_TYPE_SOFTWARE)在我的自定义视图上使用.它一直运作良好,但它无法帮助我提供60FPS.
为了使帧速率达到60FPS,我决定改用LAYER_TYPE_NONE.现在,我决定在某个特定的缩放级别停止它并进一步缩放,缩放canvas(在失去清晰度时),而不是让路径缩放不受限制.为了找到我应该停止缩放path并开始缩放的缩放级别canvas,我一直在做一些路径(我使用nexus 7(2012)和nexus 9作为测试设备)
我希望path too large to be rendered into a texture只有在达到纹理大小限制(我发现使用canvas.isHardwareAccelerated())之后才能看到该消息.
path too large to be rendered into a texture在日志中看到.我预计这发生在2048年!A/libc? Fatal signal 11 (SIGSEGV), code 1, fault addr 0x78 in tid 7252 (RenderThread)即使达到纹理限制,应用程序也会与日志崩溃.例如,这些是应用程序崩溃时自定义视图的一些维度:(7199,5049),(13814,2500),(8040,4200).我可以找到的唯一共性是自定义视图(以及path)的总面积增长超过32,000,000像素.因此,我无法确定何时应该从缩放切换path到缩放canvas.关于何时这样做的任何想法?
编辑1
我观察到,对于nexus 9,当应用程序的总面积path达到~33,000,000 时,应用程序崩溃.这个限制意味着什么?
在编译语言中,源代码由编译器转换为目标代码,并且不同的目标文件(如果有多个文件)由链接器链接并由加载器加载到存储器中以供执行.
如果我有一个使用解释语言编写的应用程序(例如,ruby或python),并且如果源代码是跨文件分割的,那么文件恰好是在一起的时候.换句话说,链接什么时候完成?解释语言首先是否具有连接器和装载器,还是解释器可以完成所有操作?
我对此感到困惑,无法理解它!任何人都可以对此有所启发吗?!
我在我的Android应用程序中使用ORMLite,有些情况下我需要sqlite的INSERT OR UPDATE功能.我知道ORMLite有,createOrUpdate但它不适用于我的特定情况.
我将用一个例子解释我的案例.我有两个表A&B.它们之间具有多对多关系,使用单独的映射表表示M.表A和B手动生成的主键和M用途generatedId = true.两列在M那家商店的外键A&B已经uniqueCombo = true对他们的设置.因此,当我从后端获取记录(作为JSON)M时,当我尝试调用时,它已经存在,createOrUpdate它将在UNIQUE约束时失败.原因是
public CreateOrUpdateStatus createOrUpdate(T data) throws SQLException {
if (data == null) {
return new CreateOrUpdateStatus(false, false, 0);
}
ID id = extractId(data);
// assume we need to create it if there is no id
if (id == null || !idExists(id)) …Run Code Online (Sandbox Code Playgroud) 我有许多端点,并且必须为其中一些端点提供不同的ErrorHandlers&RequestInterceptors.在这个答案中,JakeWharton(其中一个开发者Retrofit)说RestAdapter应该被视为单身人士.在同一篇文章中,另一个答案说,单身人士地图用于实现端点特定RequestInterceptors.
为了确保在RestAdapters使用时所有使用相同的连接池OkHttp,我OkHttpClient在这样的所有适配器中共享我的s
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setConnectTimeout(10000, TimeUnit.MILLISECONDS);
okHttpClient.setReadTimeout(10000, TimeUnit.MILLISECONDS);
OkClient okClient = new OkClient(okHttpClient);
RestAdapter restAdapter1 = new RestAdapter.Builder()
.setClient(okClient)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint("http://example.com/)
.setErrorHandler(ErrHandlerFactory.get(Endpoint1.class))
.setRequestInterceptor(ReqInterceptorFactory.get(Endpoint1.class))
.build();
RestAdapter restAdapter2 = new RestAdapter.Builder()
.setClient(okClient)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint("http://example.com/)
.setErrorHandler(ErrHandlerFactory.get(Endpoint2.class))
.setRequestInterceptor(ReqInterceptorFactory.get(Endpoint2.class))
.build();
Run Code Online (Sandbox Code Playgroud)
其中Endpoint1&Endpoint2是interface遵循改造的注解秒.然后构建RestAdapter用于进一步的api调用.这是进行端点特定操作的最佳方式还是我遗漏了什么?
Java中是否有一种数据结构能够满足以下要求?
get(i))get()和contains()方法Comparator)我找不到任何可以提供上面列出的开箱Oracle's JDK即用功能的内容Guava
List提供索引访问和某种排序,但不是恒定时间contains()。SortedSet并SortedMap提供恒定时间contains()和排序,但不提供索引访问!
我是否遗漏了某些内容,或者是否有任何数据结构可以被操纵以提供上面列出的功能?
我当前的解决方案:
HashMap& =>的组合ArrayList用于ArrayList存储排序键,它提供索引访问并用于HashMap常量时间contains()方法。我只是想确保我不会尝试重新发明已经完成的事情
为什么我需要这个:
我们称此数据结构为SortedDataStore
我正在开发的 Android 应用程序,其中的大部分 UI 是一个项目列表,这些项目是从本地数据库中提取的。(本地数据库从远程服务器获取数据)。UI 是使用填充的RecyclerView,我需要恒定时间索引访问来从我的对象中获取对象SortedDataStore并填充视图。由于项目的顺序是根据其属性决定的,因此需要排序。此外,数据也会更新很多(项目被修改、删除,新项目被添加)。当新数据进入时,我会检查SortedDataStore是否应该删除、添加或修改(并移动到另一个索引),为此我需要恒定时间contains()和可变性。