我试图使用Net :: HTTP向Twitter发送GET请求(因隐私原因而替换用户ID):
url = URI.parse("http://api.twitter.com/1/friends/ids.json?user_id=12345")
resp = Net::HTTP.get_response(url)
Run Code Online (Sandbox Code Playgroud)
这会在Net :: HTTP中引发异常:
NoMethodError:未定义的方法
empty?' for #<URI::HTTP:0x59f5c04> from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in初始化'
巧合的是,我偶然发现了一个类似的代码片段,URI.encode之前使用过URI.parse,所以我复制了它并再次尝试:
url = URI.parse(URI.encode("http://api.twitter.com/1/friends/ids.json?user_id=12345"))
resp = Net::HTTP.get_response(url)
Run Code Online (Sandbox Code Playgroud)
现在它工作正常,但为什么?有迹象表明,需要在逃避我提到的网址没有保留字符,所以为什么我要调用URI.encode的get_response成功吗?
我试图绕过这个,但我根本不明白为什么会发生这种情况:根据默认的proguard.cfg文件,我定义了以下规则:
-keep public class * extends android.app.Activity
Run Code Online (Sandbox Code Playgroud)
据我所知,这意味着:保持任何Activity类作为入口点,但随意收缩/混淆/优化其中的任何内容(否则我必须使用例如<methods>通配符来保存方法,对吧?).
现在我的测试Activity看起来像这样:
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
...
}
public void unusedMethod() {
}
}
Run Code Online (Sandbox Code Playgroud)
如果我现在导出已签名的APK,并且调用ProGuard,它将unusedMethod按预期删除,但它将保留该onCreate方法而不会混淆其名称.这是为什么?
我正试图在那里筛选无数的测试解决方案,我甚至不确定我是否朝着正确的方向前进.故事是:我们正在运行一个RESTful Web服务,实现为Rails应用程序,支持我们的移动客户端.我们是单元测试Web服务(当然),但这涉及模拟应用程序的许多部分,例如搜索堆栈(Apache SOLR).
此外,我们的测试不会(即不能!)覆盖关键路线,例如移动登录/登录过程,因为这涉及API应用程序和移动网站之间的通信,用户可以在其中输入凭据,例如SSO(Janrain Engage).因此,标准的Rails集成测试不会这样做.
我从理论上认识到,如果测试套件设计得非常好,那么模拟只发生在下一层测试开始的那些连接点上,然后单独或功能测试服务API和移动网站,可以获得相同的测试覆盖率.我发现在实践中,如果你有几个开发人员独立地在测试套件上工作,这是一种错觉; 我承认我们的单元测试并不是那么精心设计的.特别是在运行TDD时,我发现虽然测试可以驱动应用程序代码,但测试代码设计仅针对被测单元进行了定制,从而产生了相当广泛的测试套件.
我发现的另一件事是,有时我们没有检测到纯粹使用单元测试的回归,例如,由于连锁效应,错误的查询被发送到SOLR服务器.这就是为什么我认为确保整个堆栈沿着关键路由工作的唯一真正方法是在每次部署之前在登台服务器上自动端到端地测试它,即将实际的HTTP请求发送到应用程序.
我的问题是:
testing integration-testing web-services ruby-on-rails acceptance-testing
我们有一个基于Maven的Android版本,我们刚刚从JDK 6切换到7.
然而,它带来了IntelliJ问题的一部分.每次检测到POM中的更改并重新导入/刷新项目时,它会返回选择旧的"模块SDK",即配置为使用Java 6的模块:

即使我从"平台设置"对话框手动删除这些SDK,它们仍然会重新显示为"Maven Android API 19 Platform(N)",其中N是用于从所有其他(相同)SDK中消除歧义的数字.
我应该提一下,我们在POM中指定了Java 7的目标.我试图设置编译器插件语言级别和maven.compiler.*属性(不确定是否完成相同的事情),没有运气:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
IntelliJ应该选择并始终将项目配置为使用Java 7 SDK?我错过了什么吗?
我注意到当我在IntelliJ中完全删除对1.6 SDK的任何引用时问题就消失了.我猜这并不奇怪,但也不可行,因为我还有其他项目仍然依赖于Java 6 SDK的存在.
我有一个源自 的自定义视图Button,我想在运行时相对于另一个视图定位它。因为当我的视图膨胀时我还不知道其他视图的位置(因为布局尚未开始),所以我利用处理程序onSizeChanged来设置我的视图相对于其他视图的位置。
在onSizeChanged:
LayoutParams lp = new LayoutParams(this.getMeasuredWidth(), this.getMeasuredHeight());
lp.leftMargin = x;
lp.topMargin = y;
this.setLayoutParams(lp);
forceLayout();
Run Code Online (Sandbox Code Playgroud)
然而,这没有任何效果。怎么会?
确实是一个简单的问题:
对于非常简单的图形(例如分隔线),使用FrameLayout并将图像设置为背景而不是使用ImageView,在布局/渲染成本方面是否更便宜?直觉是,FrameLayout是所有视图中最简单的(就功能而言),而ImageView则执行缩放和裁剪之类的操作。另一方面,FrameLayout是一个ViewGroup并维护子级,而ImageView则不维护(尽管在这种情况下,没有子级视图)。
还是在性能方面没什么可谈的?
我想开发一个 Maven 插件,作为其配置的一部分(将映射到 mojo 字段),我想在一些标签上提供 XML 属性。不幸的是,官方指南没有提到在配置块中使用属性(这可能意味着也可能不意味着它根本不可能。)
我想要的是这样的:
<plugin>
<configuration>
<my_option attr="x" /> <!-- is this possible? -->
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这有可能吗?如果是这样,这将如何映射到我的魔力中的字段?
由于不建议Context在任务中保留对a的强引用(当任务仍在运行时上下文可能会被破坏,但是由任务保存在内存中),我想知道这些是否同样适用于Fragments?
片段管理其活动参考,并支持通过保留setRetainInstance.我可以假设,例如在片段中创建非静态内部AsyncTask是否安全,不会泄漏$this?
我正在尝试为match_parent-wide容器创建平铺的背景,其中从父级的中心而不是从其左边缘重复平铺。我希望这样做,以便无论屏幕宽度如何,背景都始终居中显示。
我注意到Android的BitmapDrawable具有gravity属性,但是当tileMode设置为repeat或时,它似乎无效mirror。我期望位图首先在其容器中居中,然后从中心点向外重复。相反,它仍然是左对齐然后重复,导致第一个图块始终完全可见,但是最后一个图块被切除,除非屏幕宽度是该图块宽度的倍数。
更新:刚刚注意到,“启用平铺模式时,重力将被忽略。” (tileMode attr文档。)还有其他方法可以实现这一点吗?
我试图理解为什么以下代码抛出:
open class Base(open val input: String) {
lateinit var derived: String
init {
derived = input.toUpperCase() // throws!
}
}
class Sub(override val input: String) : Base(input)
Run Code Online (Sandbox Code Playgroud)
在调用此代码时,如下所示:
println(Sub("test").derived)
Run Code Online (Sandbox Code Playgroud)
它抛出一个异常,因为当时toUpperCase被调用,input解析为null.我发现这个反直觉:我将一个非null值传递给主构造函数,但是在超类的init块中它解析为null?
我想我对可能发生的事情有一个模糊的概念:因为input既可以作为构造函数参数也可以作为属性,赋值内部调用this.input,但this尚未完全初始化.这真的很奇怪:在IntelliJ调试器中,input正常解析(到值"test"),但是一旦我调用表达式评估窗口并input手动检查,它就会突然变为空.
假设这是预期的行为,你建议做什么,即当需要初始化从同一类的属性派生的字段时?
更新: 我发布了两个更简洁的代码片段,说明了混淆源自何处:
https://gist.github.com/mttkay/9fbb0ddf72f471465afc https://gist.github.com/mttkay/5dc9bde1006b70e1e8ba
android ×6
maven ×2
http ×1
java ×1
kotlin ×1
layout ×1
maven-plugin ×1
performance ×1
proguard ×1
ruby ×1
testing ×1
url-encoding ×1
views ×1
web-services ×1