小编Eug*_*nov的帖子

UIImagePickerController没有在iOS 8中呈现

是否有其他人UIImagePickerController在iOS 8中遇到问题?下面的方法在iPad上的iOS 7中运行得非常好,但是当我尝试呈现选择器(最后一行)时,我在XCode 6(Beta 3或4)中运行时会出现以下错误.如果重要,那么sourceType的选择来自于在同一个地方呈现的alertView.

Warning: Attempt to present <UIImagePickerController: 0x7c0ae400>  on <CAGUCreateContactViewController: 0x7bf61a00> which is already presenting (null)
Run Code Online (Sandbox Code Playgroud)

打开imagePicker的方法.

- (void)openPhotoPicker:(UIImagePickerControllerSourceType)sourceType
{
    if ([UIImagePickerController isSourceTypeAvailable:sourceType]) {
        NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];
        if ([availableMediaTypes containsObject:(NSString *)kUTTypeImage]) {
            UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
            imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
            imagePickerController.sourceType = sourceType;
            imagePickerController.mediaTypes = @[(NSString *)kUTTypeImage];
            imagePickerController.delegate = self;

            self.imagePickerController = imagePickerController;

            if (sourceType == UIImagePickerControllerSourceTypeCamera) {
                [self presentViewController:self.imagePickerController animated:YES completion:nil];
            } else {                    
                if (self.popoverVC) {
                    [self.popoverVC dismissPopoverAnimated:YES];
                    self.popoverVC = …
Run Code Online (Sandbox Code Playgroud)

uiimagepickercontroller ipad ios ios8

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

RecyclerView适配器的生命周期是什么?

我正在从适配器中的演示者请求图像:

  @Override
  public void onBindViewHolder(SiteAdapter.ViewHolder holder, int position)
  {
    Site site = sites.get(position);
    holder.siteName.setText(site.getName());
    requestHolderLogo(holder, site.getLinks().getLogoUrl());
  }

  private void requestHolderLogo(final ViewHolder holder, final String logoUrl)
  {
    compositeSubscription.add(
      presenter.bitmap(logoUrl)
        .subscribe(
          bitmap -> {
            holder.siteLogo.setImageBitmap(bitmap);
            holder.siteLogo.setVisibility(View.VISIBLE);
          },
          error -> {
            holder.siteName.setVisibility(View.VISIBLE);
          })
    );
  }
Run Code Online (Sandbox Code Playgroud)

我应该在ViewHolder重新使用时取消订阅.这很容易.

但是当视图被销毁时如何停止所有订阅?我也应该使演示者引用无效以避免内存泄漏

android android-lifecycle android-recyclerview

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

Gradle测试失败并出现错误

我在输出中看到下一个:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':test'.
> superClassName is empty!
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何解决它,我感激不尽.

我已经看了http://issues.gradle.org/browse/GRADLE-1682.但任何解决方案都无济于事

创建Gist以获取更多信息:https: //gist.github.com/emartynov/c88194c702b77f42a7c0

这是stacktrace:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':test'.
    at   org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.
java:72)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:49
)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskEx
ecuter.java:34)
    at org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter$1.run(CacheLockHandlingTaskExecuter.jav
a:34)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:179)
    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:232)
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStor
e.java:142)
    at org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskA
rtifactStateCacheAccess.java:83)
    at org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter.execute(CacheLockHandlingTaskExecuter.j
ava:32)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExec
uter.java:41)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.j
ava:51)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.j
ava:42) …
Run Code Online (Sandbox Code Playgroud)

unit-testing gradle

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

来自checkstyle配置的IntelliJ IDEA代码格式

我决定为android maven插件做贡献.

他们使用非常具体的代码样式格式.我需要一些时间来修改IDEA代码格式规则以满足他们的要求.

幸运的是有checkstyle配置.我已经为IDEA安装了check-style插件,并立即看到我当前格式错误的位置.

不幸的是,我没有找到将checkstyle配置导入IDEA格式规则的方法.

如果有可能,我很感兴趣.

code-formatting intellij-idea checkstyle

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

如何使用Android Studio运行单元测试

我正在使用Jake的Android单元测试插件进行gradle:https://github.com/JakeWharton/gradle-android-test-plugin

我的build.gradle看起来像这样:

dependencies {
// analytics
compile('com.crittercism:crittercism-android:3.0.11')

// retrofit
compile('com.squareup.retrofit:retrofit:1.2.2')
compile('com.squareup.okhttp:okhttp:1.2.1')

// dagger
compile('com.squareup.dagger:dagger:1.1.0')
compile('com.squareup.dagger:dagger-compiler:1.1.0')

// compatibility
compile('android.compatibility:android-support:v4-r13')
compile('com.actionbarsherlock:actionbarsherlock:4.4.0@aar')

// Picasso
compile('com.squareup.picasso:picasso:2.1.1')

// Otto
compile('com.squareup:otto:1.3.4')

// Tests
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.2'
testCompile 'org.powermock:powermock-api-mockito:1.5.1'
testCompile 'org.easytesting:fest-assert-core:2.0M10'
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法运行所有或特定的单元测试表单Android Studio.我收到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:171)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 ... 3 more
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为运行命令行不包括我的JUnit依赖项:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/Android Studio.app/bin" …
Run Code Online (Sandbox Code Playgroud)

junit android gradle robolectric android-studio

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

Android原生崩溃

我们没有使用任何本机代码,我们的应用程序也没有任何本机传递依赖.

在最近发布之后(我们更新了几个依赖项并添加新内容),我们开始在Google Play中看到这样的崩溃:

native: pc 000000000006a548  /system/lib64/libc.so (tgkill+8)
  native: pc 0000000000067cd8  /system/lib64/libc.so (pthread_kill+68)
  native: pc 0000000000024b78  /system/lib64/libc.so (raise+28)
  native: pc 000000000001f318  /system/lib64/libc.so (abort+60)
  native: pc 000000000043471c  /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+324)
  native: pc 0000000000137224  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
  native: pc 000000000030d988  /system/lib64/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+2080)
  native: pc 000000000030df24  /system/lib64/libart.so (_ZN3art9JavaVMExt9JniAbortFEPKcS2_z+224)
  native: pc 000000000034ec64  /system/lib64/libart.so (_ZN3art3JNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list+616)
  native: pc 0000000000099094  /system/lib64/libandroid_runtime.so
  native: pc 0000000002a71ac4  /system/framework/arm64/boot.oat
Run Code Online (Sandbox Code Playgroud)

我认为这只是Android本身,但可能是什么原因?任何帮助表示赞赏.

这个电话有什么意义吗?它是虚拟机的一些调用吗?

_ZN3art3JNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list
Run Code Online (Sandbox Code Playgroud)

crash android native

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

将JSON反序列化为类

服务器返回JSON的这一部分:

{"condition": {
    "or": [
        {
            "and": [
                {
                    "operand": "a",
                    "operator": "==",
                    "value": "true"
                },
                {
                    "not": {
                        "operand": "b",
                        "operator": "==",
                        "value": "true"
                    }
                }
            ]
        },
        {
            "and": [
                {
                    "operand": "b",
                    "operator": "==",
                    "value": "true"
                },
                {
                    "not": {
                        "operand": "a",
                        "operator": "==",
                        "value": "true"
                    }
                }
            ]
        }
    ]
}}
Run Code Online (Sandbox Code Playgroud)

我写了下一个类层次结构:

public interface Condition {}


public class Expression implements Condition { 
   public Expression(String operator, String operand, String value) {
   } 
}


public class Not implements …
Run Code Online (Sandbox Code Playgroud)

java json jackson deserialization

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

Lint错误"不要将位置视为固定;只能立即使用......"

我正在为开源库做贡献并得到lint错误"不要将位置视为已修复;只能立即使用并调用holder.getAdapterPosition()以便稍后查找"以获取此代码:

  @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    mAdapter.onBindViewHolder(holder, position);

    if (!isFirstOnly || position > mLastPosition) {
      for (Animator anim : getAnimators(holder.itemView)) {
        anim.setDuration(mDuration).start();
        anim.setInterpolator(mInterpolator);
      }
      mLastPosition = position;
    } else {
      ViewHelper.clear(holder.itemView);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我已经检查过这是因为保存位置以备将来使用.图书馆创建者为什么需要这种逻辑是一个问题.但是当我将位置的使用更改为用法时,问题就消失了holder.getAdapterPosition():

  @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    mAdapter.onBindViewHolder(holder, position);

    if (!isFirstOnly || holder.getAdapterPosition() > mLastPosition) {
      for (Animator anim : getAnimators(holder.itemView)) {
        anim.setDuration(mDuration).start();
        anim.setInterpolator(mInterpolator);
      }
      mLastPosition = holder.getAdapterPosition();
    } else {
      ViewHelper.clear(holder.itemView);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我认为从概念上讲它并没有太大变化,但现在皮棉很满意.为什么?

android lint recycler-adapter

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

使用IntelliJ IDEA处理源和测试的不同语言和目标级别

如果有人知道如何在IDEA的项目属性中处理这个pom,我很感兴趣:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
       <source>1.3</source>
       <target>1.3</target>
       <testSource>1.5</testSource>
       <testTarget>1.5</testTarget>
   </configuration>
   <version>3.0</version>
</plugin> 
Run Code Online (Sandbox Code Playgroud)

我应该设置项目级别1.3和模块级别1.5还是明智的?

在IDEA重新加载maven项目的任何时候,它都会设置语言级别,因为它从maven到1.3并且总是抱怨测试类.

但这将作为错误报告给JetBrains.

java intellij-idea maven

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

两个不同的Class实例给出相同的hashCode

我在JBoss服务器上遇到了一个奇怪的问题,其中两个类正在生成相同的问题hashCode().

Class<?> cl1 = Class.forName("fqn.Class1");
Class<?> cl2 = Class.forName("fqn.Class2");
out.println(cl1.getCanonicalName());
out.println(cl2.getCanonicalName());
out.println(cl1.hashCode());
out.println(cl2.hashCode());
out.println(System.identityHashCode(cl1));
out.println(System.identityHashCode(cl2));
out.println(cl1 == cl2);
out.println(cl1.equals(cl2));
out.println(cl1.getClassLoader().equals(cl2.getClassLoader()));
Run Code Online (Sandbox Code Playgroud)

生产:

fnq.Class1
fnq.Class2
494722
494722
494722
494722
false
false
true
Run Code Online (Sandbox Code Playgroud)

我通常不会关心,但我们正在使用一个框架,该框架使用由类中的哈希码和属性名称组成的密钥来缓存setter.这对于缓存来说是一个糟糕的设计,但目前我无法控制(最新的Struts 2.3.24中的OGNL 3.0.6,请参阅源代码.较新的OGNL修复了这个问题,但它目前不会在Struts中使用2.5,目前在测试中.)

是什么让这个问题对我来说有点奇怪

  • 使用几天后会出现问题...而且我很确定这两个类/属性在此期间都会被缓存.这让我相信类实例哈希码实际上正在改变 ......几天后它们变得相等.
  • 我们观察了一个非常过时的Hotspot 1.6中的行为,现在是1.7.0_80.两者都是Sun Sparc上的32位版本
  • JVM报告-XX:hashCode为"0"

我读到Hotspot中的RNG哈希码生成器("0"策略)如果有赛车线程可以产生重复,但我无法想象类加载会触发该行为.

Hotspot在创建Class实例时是否使用特殊的哈希码处理?

java ognl

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