小编x-t*_*eme的帖子

找不到Dagger 2的符号类"Generated"

我刚刚开始使用依赖注入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或为什么没有其他人面对这个特定问题(我假设如此,因为我在这里找不到任何问题?

java android dagger-2

23
推荐指数
3
解决办法
2万
查看次数

在方向更改时,RecyclerView不会从适配器取消注册

我曾经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读取它.我确实看到我的活动有很多实例,因为 …

android listview android-recyclerview

16
推荐指数
2
解决办法
7049
查看次数

在打包期间Gradle重复文件--JodaTime的messages.properties

我换过JavaDate教学班JodaDateTime在我的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".我相信这些用于提供基于区域设置的格式.

我的预感说不应该排除这些文件.如果那里的专家可以为此提供解决方案,那就太棒了

android jodatime android-gradle-plugin

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

如何在Android的Realm中实现以下功能

在我的应用程序中,我通常有一个加载器,它从sqlite加载数据,然后将其传递给它附加的活动或片段,从absListView的适配器中设置它,然后将其呈现给用户

由于领域声明其对象不应跨线程共享,如何在不从UI线程进行任何db调用的情况下实现这一点?(这会使应用程序感觉迟钝,因为我点击数量很大)

同样在3个示例中 - 介绍,gridView迁移,很多时候在UI线程中完成数据库操作.UI线程中的数据库操作不是在Android中非常皱眉吗?

引用文档 - 可能长时间运行的操作(如网络或数据库操作)或计算成本高昂的计算(如调整位图大小)应在工作线程中完成(或者在数据库操作的情况下,通过异步请求).

sqlite android realm

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

android.graphics.path的限制

我有一个可以缩放和平移的自定义视图.它只是显示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())之后才能看到该消息.

  1. 对于nexus 7,纹理大小限制为2048,但当路径宽度或高度达到2036时路径消失,我path too large to be rendered into a texture在日志中看到.我预计这发生在2048年!
  2. 对于nexus 9,纹理大小限制为16384,但有时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 时,应用程序崩溃.这个限制意味着什么?

android opengl-es android-canvas

7
推荐指数
0
解决办法
363
查看次数

链接和加载解释语言

在编译语言中,源代码由编译器转换为目标代码,并且不同的目标文件(如果有多个文件)由链接器链接并由加载器加载到存储器中以供执行.

如果我有一个使用解释语言编写的应用程序(例如,ruby或python),并且如果源代码是跨文件分割的,那么文件恰好是在一起的时候.换句话说,链接什么时候完成?解释语言首先是否具有连接器和装载器,还是解释器可以完成所有操作?

我对此感到困惑,无法理解它!任何人都可以对此有所启发吗?!

ruby python linker interpreted-language compiled-language

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

ORMLite插入或替换

我在我的Android应用程序中使用ORMLite,有些情况下我需要sqlite的INSERT OR UPDATE功能.我知道ORMLite有,createOrUpdate但它不适用于我的特定情况.

我将用一个例子解释我的案例.我有两个表A&B.它们之间具有多对多关系,使用单独的映射表表示M.表AB手动生成的主键和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)

sqlite android ormlite

6
推荐指数
0
解决办法
882
查看次数

多个Retrofit RestAdapters

我有许多端点,并且必须为其中一些端点提供不同的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&Endpoint2interface遵循改造的注解秒.然后构建RestAdapter用于进一步的api调用.这是进行端点特定操作的最佳方式还是我遗漏了什么?

java retrofit okhttp

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

Java数据结构:IndexedSet或HashList

Java中是否有一种数据结构能够满足以下要求?

  1. 索引访问。(即,我应该能够使用 检索对象get(i)
  2. 恒定时间get()contains()方​​法
  3. 应强制执行排序(由 强制执行Comparator
  4. 应该是可变的

我找不到任何可以提供上面列出的开箱Oracle's JDK即用功能的内容Guava

List提供索引访问和某种排序,但不是恒定时间contains()SortedSetSortedMap提供恒定时间contains()和排序,但不提供索引访问!

我是否遗漏了某些内容,或者是否有任何数据结构可以被操纵以提供上面列出的功能?

我当前的解决方案:

HashMap& =>的组合ArrayList用于ArrayList存储排序键,它提供索引访问并用于HashMap常量时间contains()方法。我只是想确保我不会尝试重新发明已经完成的事情

为什么我需要这个:

我们称此数据结构为SortedDataStore 我正在开发的 Android 应用程序,其中的大部分 UI 是一个项目列表,这些项目是从本地数据库中提取的。(本地数据库从远程服务器获取数据)。UI 是使用填充的RecyclerView,我需要恒定时间索引访问来从我的对象中获取对象SortedDataStore并填充视图。由于项目的顺序是根据其属性决定的,因此需要排序。此外,数据也会更新很多(项目被修改、删除,新项目被添加)。当新数据进入时,我会检查SortedDataStore是否应该删除、添加或修改(并移动到另一个索引),为此我需要恒定时间contains()和可变性。

java guava data-structures

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