小编Epi*_*rce的帖子

如何在Android项目中从头开始设置DAGGER依赖注入?

如何使用Dagger?如何配置Dagger在我的Android项目中工作?

我想在我的Android项目中使用Dagger,但我发现它令人困惑.

编辑:Dagger2也从2015年04月15日开始,它更令人困惑!

[这个问题是一个"存根",我在我的答案中添加了更多关于Dagger1的知识,并且更多地了解了Dagger2.这个问题更多的是指导而不是"问题".

android dependency-injection dagger dagger-2

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

Java 8:使用换行符和缩进格式化lambda

我想用lambda缩进实现的目的如下:

多行声明:

String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl)
                         .filter(
                             (x) -> 
                             {
                                 return x.contains("(M)");
                             }
                         ).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

单行声明:

List<String> strings = Arrays.stream(ppl)
                         .map((x) -> x.toUpperCase())
                         .filter((x) -> x.contains("(M)"))
                         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)



目前,Eclipse正在自动格式化为以下内容:

多行声明:

String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl).filter((x) ->
{
    return x.contains("(M)");
}).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

单行声明:

String[] ppl …
Run Code Online (Sandbox Code Playgroud)

java eclipse lambda java-8 java-stream

75
推荐指数
6
解决办法
4万
查看次数

Dagger2自定义范围:自定义范围(@ActivityScope)如何实际工作?

我正在阅读GitHub上的Dagger2组件范围测试的源代码,我看到为被调用的活动定义了"自定义范围" @ActivityScope,但我在其他项目中看到了它,包括具有其范围的4模块CleanArchitecture@PerActivity.

但从字面上看,@ActivityScope注释的代码如下:

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.inject.Scope;

/**
 * Created by joesteele on 2/15/15.
 */
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
Run Code Online (Sandbox Code Playgroud)

它在模块中"神奇地"可用:

@Module
public class ActivityModule {
  @Provides @ActivityScope Picasso providePicasso(ComponentTest app, OkHttpClient client) {
    return new Picasso.Builder(app)
        .downloader(new OkHttpDownloader(client))
        .listener(new Picasso.Listener() {
          @Override public void onImageLoadFailed(Picasso picasso, Uri uri, Exception e) {
            Log.e("Picasso", "Failed to load image: " + uri.toString(), e);
          }
        })
        .build();
  }
}
Run Code Online (Sandbox Code Playgroud)

或者CleanArchitecture …

android scope android-activity dagger-2

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

弹簧安全403错误

我正在尝试按照网络指南使用Spring安全保护我的网站.所以在我的服务器端,WebSecurityConfigurerAdapter和控制器看起来像这样

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
implements ApplicationContextAware {

@Override
protected void registerAuthentication(AuthenticationManagerBuilde r authManagerBuilder) throws Exception {
authManagerBuilder.inMemoryAuthentication()
.withUser("user").password("password").roles("ADMI N");
}
}

@Controller
//@RequestMapping("/course")
public class CourseController implements ApplicationContextAware{

@RequestMapping(value="/course", method = RequestMethod.GET, produces="application/json")
public @ResponseBody List<Course> get(// The critirion used to find.
@RequestParam(value="what", required=true) String what,
@RequestParam(value="value", required=true) String value) {
//.....
}

@RequestMapping(value="/course", method = RequestMethod.POST, produces="application/json")
public List<Course> upload(@RequestBody Course[] cs) {
}
}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是服务器没有响应POST/DELETE方法,而GET方法工作正常.顺便说一下,我在客户端使用RestTemplate.例外情况是:

Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 403 Forbidden
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-security

39
推荐指数
4
解决办法
6万
查看次数

私有接口方法,例如用例?

"作为添加对Lambda表达式的支持的努力的一部分,简单地考虑将接口中的私有方法支持包含在Java SE 8中,但是为了更好地关注Java SE 8的更高优先级任务而被撤回.现在提议支持私有接口方法,从而使接口的非抽象方法能够在它们之间共享代码."

所以说http://openjdk.java.net/jeps/213的规范, 并在错误报告https://bugs.openjdk.java.net/browse/JDK-8071453中说.

但是,即使有上面​​给出的简短解释,我也无法想到任何必要的用例.我可以问一个例子,"私有接口方法"在代码方面是否有用?

编辑:所以答案是,由于Java 8中的接口添加了默认实现,可能存在默认实现使用相同代码库的情况.

例如,

public interface MyInterface {
     default void initializeMyClass(MyClass myClass, Params params) {
         //do magical things in 100 lines of code to initialize myClass for example
     }

     default MyClass createMyClass(Params params) {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, params);
         return myClass;
     }

     default MyClass createMyClass() {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, null);
         return myClass;
     }
}
Run Code Online (Sandbox Code Playgroud)

愚蠢的例子,我知道.但是,让我们说我们想要initializeMyClass(MyClass, Params)在两种方法中使用.但是,如果我们这样做(默认方法),那么initializeMyClass(MyClass, Params)将成为公共接口的一部分!为了防止这种情况发生,我们只能将整个代码保留initializeMyClass(MyClass, Params) …

java private interface java-9

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

将AS更新为1.0后,在项目中获取"方法ID不在[0,0xffff]:65536"错误

我将Android Studio更新到最新版本,让它"修复项目"之类 - 但现在我的项目没有编译,给了我

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --output D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\dex\debug --input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
    2
Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
        at com.android.dx.command.dexer.Main.run(Main.java:245)
        at com.android.dx.command.dexer.Main.main(Main.java:214)
        at com.android.dx.command.Main.main(Main.java:106)
Run Code Online (Sandbox Code Playgroud)

但是,只有通过多索引才能解决这个问题,因为当我添加这个时:

defaultConfig {
    ...
    multiDexEnabled = true
}
Run Code Online (Sandbox Code Playgroud)

有时候是这样的

D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --multi-dex …
Run Code Online (Sandbox Code Playgroud)

android gradle dex android-studio

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

PowerShell字符串默认参数值无法按预期工作

#Requires -Version 2.0

[CmdletBinding()]
Param(
  [Parameter()] [string] $MyParam = $null
)

if($MyParam -eq $null) {
  Write-Host 'works'
} else {
  Write-Host 'does not work'
}
Run Code Online (Sandbox Code Playgroud)

输出"不起作用"=>看起来像字符串隐式地从空转换为空字符串?为什么?如何测试一个字符串是空的还是真的$ null?这应该是两个不同的值!

powershell powershell-4.0

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

OOP基础与SOLID之间的区别?

我知道OOP(面向对象编程)和SOLID.

  • OOP基础知识
    • 封装
    • 抽象化
    • 遗产
    • 多态性

  • 固体
    • 单一责任原则
    • 开放/封闭原则
    • 利斯科夫替代原则
    • 接口隔离原理
    • 依赖倒置原则)

但是,我不确定具体的区别是什么,以及SOLID是否是OOP的子集.谁能帮助解释这些差异?

oop design-patterns solid-principles

26
推荐指数
2
解决办法
2575
查看次数

如何部署领域对象服务器

我正在考虑将新的Realm移动平台用于我的项目.我已经浏览了指南,能够在本地启动并运行没问题.我的问题是,部署Realm Object Server的最佳方法是什么,以便可以远程运行?我仔细阅读了这里的指南,但并没有真正理解它.我只有很少的经验部署rails应用程序到heroku.如何将它部署到Heroku或类似的服务?任何帮助表示赞赏.谢谢!

realm realm-mobile-platform

18
推荐指数
1
解决办法
5067
查看次数

PowerShell XML SelectNodes无法处理XPath

我想使用PowerShell获取我的csproj文件中所有项目引用的列表.目前我有以下方法:

[xml]$csproj = Get-Content MyProject.csproj

$refs = $csproj.SelectNodes("//ProjectReference")
foreach($ref in $refs) {
  # Later on output more useful information
  Write-Host $ref.Name
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管在给定的csproj文件中肯定存在ProjectReference元素,但脚本不会输出任何内容.以下是有效的:

[xml]$csproj = Get-Content MyProject.csproj
foreach($l in $csproj.Project.ItemGroup.ProjectReference) { Write-Host $l.Include }
Run Code Online (Sandbox Code Playgroud)

但是我以后也需要XPath +它为每个不包含ProjectReference的ItemGroup输出错误 - 那么如何使用SelectNodes函数使XPath工作?

示例XML(基本上任何带有项目引用的VS csproj文件都可以):

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup></ItemGroup>
  <ItemGroup>
     <ProjectReference Include="Text"></ProjectReference>
     <ProjectReference Include="Text2"></ProjectReference>
  </ItemGroup>
  <ItemGroup></ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

xml powershell xpath powershell-4.0

17
推荐指数
1
解决办法
6849
查看次数