小编Chr*_*ght的帖子

为什么exception.printStackTrace()被认为是不好的做法?

有一个很大材料这表明印刷异常的堆栈跟踪是不好的做法.

例如,来自Checkstyle的RegexpSingleline检查:

这个检查可用于查找常见的不良做法,例如调用ex.printStacktrace()

但是,我很难找到任何能够提供正确理由的地方,因为堆栈跟踪在跟踪导致异常的原因时非常有用.我所知道的事情:

  1. 最终用户永远不应该看到堆栈跟踪(出于用户体验和安全目的)

  2. 生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数"特殊"情况下不太可能成为问题)

  3. 许多日志记录框架将为您打印堆栈跟踪(我们的不会也不会,我们无法轻易更改它)

  4. 打印堆栈跟踪不构成错误处理.它应该与其他信息记录和异常处理相结合.

还有哪些其他原因可以避免在代码中打印堆栈跟踪?

java exception-handling printstacktrace

120
推荐指数
7
解决办法
11万
查看次数

为什么我的矢量可绘制缩放不符合预期?

我试图在我的Android应用程序中使用矢量drawables.来自http://developer.android.com/training/material/drawables.html(强调我的):

在Android 5.0(API Level 21)及更高版本中,您可以定义矢量drawable,可以在不丢失定义的情况下进行缩放.

使用这个drawable:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />
Run Code Online (Sandbox Code Playgroud)

和这个ImageView:

<ImageView
    android:layout_width="400dp"
    android:layout_height="400dp"
    android:src="@drawable/icon_bell"/>
Run Code Online (Sandbox Code Playgroud)

尝试以400dp显示图标时(在大约2015年左右的移动设备上运行棒棒糖的高分辨率),会产生这种模糊的图像:

blurryBellIcon

将矢量drawable的定义中的宽度和高度更改为200dp可显着改善400dp渲染大小的情况.但是,将此设置为TextView元素的drawable(即文本左侧的图标)现在会创建一个巨大的图标.

我的问题:

1)为什么矢量可绘制中有宽度/高度规格?我认为这些问题的全部意义在于它们无损扩大和缩小,其宽度和高度在其定义中毫无意义?

2)是否可以使用单个矢量drawable,它在TextView上作为24dp可绘制,但可以很好地扩展以使用更大的图像?例如,我如何避免创建不同大小的多个矢量绘图,而是使用一个可以扩展到渲染要求的​​矢量绘图?

3)如何有效地使用width/height属性以及viewportWidth/Height的区别是什么?

额外细节:

  • 设备正在运行API 22
  • 将Android Studio v1.5.1与Gradle 1.5.0版一起使用
  • 清单是编译和目标级别23,最低级别15.我也尝试将最小级别移动到21,但这没有任何区别.
  • 解压缩APK(最小级别设置为21)在可绘制文件夹中显示单个XML资源.不会生成栅格化图像.

scaling android vector drawable

85
推荐指数
5
解决办法
6万
查看次数

Java中的排序数组列表

我很困惑,我找不到快速的答案.我基本上在Java中寻找一个实现java.util.List接口的数据结构,但它以排序顺序存储其成员.我知道你可以使用普通ArrayList并使用Collections.sort()它,但我有一个场景,我偶尔会添加并经常从我的列表中检索成员,我不希望每次检索成员时都要对它进行排序,以防万一新增了一个.有人能指出我存在于JDK甚至第三方库中的这样的东西吗?

编辑:数据结构将需要保留重复.

答案摘要:我发现所有这些都非常有趣并且学到了很多东西.Aioobe尤其值得一提,因为他坚持不懈地努力实现上述要求(主要是支持重复的有序java.util.List实现).我已经接受了他的答案,因为我提出的问题是最准确的,而且最让我发现的是我正在寻找的内容的影响,即使我问的不完全是我所需要的.

我要求的问题在于List接口本身以及接口中可选方法的概念.引用javadoc:

该接口的用户可以精确控制列表中每个元素的插入位置.

插入排序列表无法精确控制插入点.然后,你必须考虑如何处理一些方法.就拿add例如:

public boolean add(Object o)

 Appends the specified element to the end of this list (optional operation).
Run Code Online (Sandbox Code Playgroud)

你现在处于令人不安的境地:1)打破合同并实现添加的排序版本2)让add一个元素添加到列表的末尾,打破你的排序顺序3)add抛出(作为其可选)抛出一UnsupportedOperationException和实施这增加了在一个有序的物品的另一种方法.

选项3可能是最好的,但我发现它有一个你不能使用的添加方法和另一个不在界面中的sortedAdd方法令人讨厌.

其他相关解决方案(无特定顺序):

  • java.util.PriorityQueue可能比我要求的最接近我所需要的.在我的情况下,队列不是对象集合的最精确定义,但从功能上来说,它可以完成我需要的所有内容.
  • net.sourceforge.nite.util.SortedList.但是,这个实现通过在add(Object obj)方法中实现排序来打破List接口的契约,并且奇怪地具有无效方法add(int index, Object obj).一般共识表明throw new UnsupportedOperationException()在这种情况下可能是更好的选择.
  • Guava的TreeMultiSet支持重复的集合实现
  • ca.odell.glazedlists.SortedList 此类在其javadoc中附带警告:Warning: This class breaks the contract required by List

java sorted data-structures

83
推荐指数
6
解决办法
10万
查看次数

在大多数JUnit测试中抛出异常是否违反最佳做法?

几乎所有的JUnit测试都使用以下签名编写:

public void testSomething() throws Exception
Run Code Online (Sandbox Code Playgroud)

我的理由是我可以专注于我正在测试的内容,而不是JUnit似乎免费提供给我的异常处理.但这样做我错过了什么吗?这是违反最佳做法的吗?我可以通过在测试中明确捕获特定异常然后失败()来获取任何东西吗?

java junit unit-testing

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

没有UI的Fragment的用例是什么?

Android开发人员指南中有一个关于Fragments使用的不错的部分.使用Fragments的一种方法是没有UI.有一些参考使用它作为后台处理的一种手段,但碎片带给这个领域的优势是什么?在哪里可以选择使用Fragment over Threads,AsyncTasks,Handlers等进行后台处理?

android android-fragments

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

您可以在TextView上设置仅图形布局预览文本吗?

我有一个样式的TextView,它的真实文本在运行时动态填充.图形布局视图对于了解此组件在外观和感觉等方面与其他组件的工作方式非常有用.此文本字段没有合理的默认值,我希望在填充之前它是空白的.如果我没有在TextView声明中指定任何文本,则TextView为空.我可以使用以下方法手动设置文本:

<TextView
     ...
     android:text="Preview text"/>
Run Code Online (Sandbox Code Playgroud)

然后切换到图形布局.但是,我必须记住要删除它,否则冒着生产版本的风险.

有没有办法指定仅在图形布局预览中看到但在运行时不适用的文本?

编辑:我正在使用Eclipse ADT.

android graphical-layout-editor

29
推荐指数
1
解决办法
6138
查看次数

根据材料设计指南正确使用微调器

在阅读了Google材料设计的新设计指南后,我没有找到任何在材料设计中设计/显示微调器(http://developer.android.com/design/building-blocks/spinners.html)的明确解决方案.

最接近的将是这样的:http://material-design.storage.googleapis.com/publish/v_1/quantumexternal/0Bx4BSt6jniD7anplVHR3QkdNUHc/components_menus_behavior2.png - 但我很确定,会有更好的解决方案.特别是如果它涉及旋转弹出窗口.即便如此,我在Android工作室中找不到任何微调器/菜单元素 - 所以我认为这将是自定义控件.

我找到的最好的例子是上面链接的菜单,它涵盖了微调元素的功能.

您会建议显示此类控件并处于材料设计范围内.

android spinner android-spinner drop-down-menu material-design

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

如何从url参数预先填充html表单输入字段?

我有一个vanilla html页面,里面有一个表单.已经要求能够通过URL预先填充表单.就像是:

http://some.site.com/somePage.html?forename=Bob&surname=Jones
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到任何简单的解决方案.有人可以通过一些javascript指向我正确的方向来实现这一目标吗?很高兴使用javascript解决方案,但我宁愿避免只为这一次使用而拉入整个库(目前没有使用).谢谢.

html forms parameters url

21
推荐指数
4
解决办法
7万
查看次数

使用JUnit作为验收测试框架

好的,所以我为一家近年来公开采用敏捷实践进行开发的公司工作.我们的单元测试和代码质量正在提高.我们仍在努力的一个领域是在自动验收测试领域找到最适合我们的方法.我们希望利用我们构建良好的用户故事并使用它们以测试驱动的方式驱动代码.这也将为我们提供每个用户故事的验收水平测试,然后我们可以自动化.

到目前为止,我们已经尝试过Fit,Fitnesse和Selenium.每个都有自己的优势,但我们也有它们的真正问题.有了Fit和Fitnesse,我们不禁觉得它们过于复杂,我们在使用它们时遇到了很多技术问题.该公司尚未完全购买这些工具,并不是特别热衷于维护脚本(并且不是桌面风格的忠实粉丝).Selenium非常好,但速度慢,依赖于实时数据和资源.

我们现在正在考虑的一种方法是使用JUnit框架来提供类似的功能.不是使用JUnit仅测试一小部分工作,为什么不使用它来编写测试(使用JUnit框架)来覆盖应用程序的接受级别?即采取一个新的故事("作为一个用户,我希望看到我的政策的基本细节......")并在JUnit中编写一个测试,该测试开始在政策详细信息链接的入口点执行应用程序代码,但涵盖所有代码并且逻辑到存根数据访问层并返回到转发到应用程序中的下一页的点,断言用户应该在该页面上看到什么数据.

在我看来,这具有以下优点:

  • 简单(无需额外的框架)
  • 零工作与我们的持续集成构建服务器集成(因为它已经处理了我们的JUnit测试)
  • 团队中已经存在完整的技能组合(毕竟它只是一个JUnit测试)

缺点是:

  • 减少客户参与(尽管他们在编写验收测试的第一个位置上大量参与编写用户故事)
  • 也许更难以理解(或理解)JUnit类中的用户故事和接受标准与自由文本规范ala Fit或Fitnesse相比较

所以,我的问题是,你有没有尝试过这种方法?曾经考虑过吗?你的想法是什么?你对这种方法有什么喜欢和不喜欢?最后,如果你能说出你喜欢或不喜欢它们的原因,请仅提及其他框架.

java junit automated-tests acceptance-testing

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

正则表达式匹配JAVA中的斜杠

我希望在特定字符串中匹配正斜杠/或反斜杠\,例如:
1.2 Hi/Hello/Bye/
. Hi\Hello\Bye\
3. Hi\Hello/Bye\
4. HiHelloBye
在给定字符串中,只有最后一条记录不匹配,因为它不包含任何一个/\.

我在用什么

if (strFile.matches(".*//.*"))
{
    //String Matches.
}
else
{
    //Does not match.
}
Run Code Online (Sandbox Code Playgroud)

/仅适用于正斜杠.我不知道如何为斜杠(for ORcondition)编写正则表达式.

java regex

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