小编Ben*_*son的帖子

标量与原始数据类型 - 它们是一样的吗?

在我读过的各种文章中,有时会引用原始数据类型,有时会引用标量.

我对每个的理解是它们是简单的数据类型,如int,boolean,char等.

是否有我遗漏的东西意味着你应该使用特定的术语或者这些术语是否可以互换?每个维基百科页面都没有显示任何明显的内容.

如果这些条款只是可以互换的,那么这是首选条款?

scalar types programming-languages terminology primitive-types

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

Android单元测试没有嘲笑

我按照了这个指南 https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support, 但我遇到了这个错误:

junit.framework.AssertionFailedError: Exception in constructor: testSaveJson (java.lang.RuntimeException: Method put in org.json.JSONObject not mocked. See https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support for details.
Run Code Online (Sandbox Code Playgroud)

我按照指南的说法修改了Gradle,但它并没有什么区别

 testOptions { 
    unitTests.returnDefaultValues = true
  }
Run Code Online (Sandbox Code Playgroud)

junit android unit-testing

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

使用双精度时,为什么不(x /(y*z))与(x/y/z)相同?

这部分是学术性的,就我的目的而言,我只需将它四舍五入到小数点后两位; 但是我很想知道结果会产生两个稍微不同的结果.

这是我写的测试,以缩小到最简单的实现:

@Test
public void shouldEqual() {
  double expected = 450.00d / (7d * 60);  // 1.0714285714285714
  double actual = 450.00d / 7d / 60;      // 1.0714285714285716

  assertThat(actual).isEqualTo(expected);
}
Run Code Online (Sandbox Code Playgroud)

但它失败了这个输出:

org.junit.ComparisonFailure: 
Expected :1.0714285714285714
Actual   :1.0714285714285716
Run Code Online (Sandbox Code Playgroud)

任何人都可以详细解释引擎盖下发生的事情导致1.000000000000000的价值X不同吗?

我在答案中寻找的一些要点是:精度丢失在哪里?首选哪种方法,为什么?哪个是正确的?(在纯数学中,两者都不对.也许两者都错了?)这些算术运算有更好的解决方案或方法吗?

java double rounding operator-precedence double-precision

22
推荐指数
2
解决办法
1705
查看次数

Gradle buildType/productFlavor使用意外的buildConfigField

鉴于以下配置:

productFlavors {
  normal {
    applicationId "com.app"
  }

  mock {
    applicationId "com.app.mock"
  }
}

buildTypes {
  debug {
    productFlavors.normal.buildConfigField "boolean", "mockMode", "false"
    productFlavors.mock.buildConfigField "boolean", "mockMode", "true"
  }

  release {
    productFlavors.normal.buildConfigField "boolean", "mockMode", "false"
    // Release should never point to mocks. Ever.
    productFlavors.mock.buildConfigField "boolean", "mockMode", "false"
  }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我原以为BuildConfig.mockMode = true;,这是生成的构建配置:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "*****";
  public static final String BUILD_TYPE = "debug";
  public static …
Run Code Online (Sandbox Code Playgroud)

groovy android gradle

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

使用@StyleableRes注释的obtainStyledAttributes.抑制警告

在看这里的答案时,我遇到了问题:

TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, attrs);
Run Code Online (Sandbox Code Playgroud)

似乎Android Studio不允许我传入一个不是来自R.styleable资源而没有获得警告的int .

它告诉我它需要一个类型为styleable的资源,我假设这意味着我调用的代码已经使用@StyleableRes注释进行了注释

类型风格的预期资源

阅读R.style {x}中定义的值的最佳行动方案是什么?链接帖子上接受的答案有效并编译,但我不知道如何压制警告.因为有警告,压制是否安全?如果是这样,怎么样?

java android annotations android-resources android-studio

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

如何更改弹出菜单弹出窗口的位置

我在每个项目的listview适配器中有一个弹出菜单.屏幕左边会弹出菜单,如何将其更改为右侧

private void showPopupMenu(View v, final App app) {
    PopupMenu popupMenu = new PopupMenu(context, v);

    popupMenu.getMenuInflater().inflate(R.menu.quick_action_menu,
            popupMenu.getMenu());
    popupMenu
            .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                    ...
Run Code Online (Sandbox Code Playgroud)

android android-layout

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

在Java(Android)中在运行时使TextView可见

我有两个活动; 第一个活动开始第二个活动,一些数据通过意图传递.

Intent i = new Intent(this,BActivity.class);
i.putExtra("identify", "c2f");
startActivityForResult(i, 1);
Run Code Online (Sandbox Code Playgroud)

在第二个活动中,我想根据从第一个活动传递的信息,使一些TextViews/EditTexts可见(最初设置为不可见).

这是代码:

tv1 = (TextView)findViewById(R.id.textView2);
tv2 = (TextView)findViewById(R.id.textView3);
et1 = (EditText)findViewById(R.id.editText1);
et2 = (EditText)findViewById(R.id.editText2);
button = (Button)findViewById(R.id.send_result);

Bundle extras = getIntent().getExtras();
String identifier = extras.getString("identify");

if(identifier == "c2f")
{
    tv1.setVisibility(0);
    tv1.setText("Celcius");
    et1.setVisibility(0);       
}

else if(identifier == "f2c")
{
    tv1.setVisibility(0);
    tv1.setText("Fahrenheit");
    et1.setVisibility(0);
}

else if(identifier == "currency")
{
    tv1.setVisibility(0);
    tv1.setText("Amount");
    tv2.setVisibility(0);
    tv2.setText("Conv. Rate");
    et1.setVisibility(0);
    et2.setVisibility(0);
}
Run Code Online (Sandbox Code Playgroud)

现在,当第二个活动开始时,这些TextView或EditTexts似乎都不可见!
identifier(string)保存从第一个活动传递的正确值,它甚至进入if条件,但它不会使任何视图可见.
我是否在试图使这些观点可见时犯了错误?

java android

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