相关疑难解决方法(0)

switch case语句错误:case表达式必须是常量表达式

我的switch-case语句昨天运行得很好.但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么.这是我的代码如下:

public void onClick(View src)
    {
        switch(src.getId()) {
        case R.id.playbtn:
            checkwificonnection();
            break;

        case R.id.stopbtn:
            Log.d(TAG, "onClick: stopping srvice");
            Playbutton.setImageResource(R.drawable.playbtn1);
            Playbutton.setVisibility(0); //visible
            Stopbutton.setVisibility(4); //invisible
            stopService(new Intent(RakistaRadio.this,myservice.class));
            clearstatusbar();
            timer.cancel();
            Title.setText(" ");
            Artist.setText(" ");
            break;

        case R.id.btnmenu:
            openOptionsMenu();
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

所有R.id.int都用红色加下划线.

java android switch-statement

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

在android中使用Enums

我差不多完成了一个计算活动,我正在Android中为我的应用程序工作.我尝试创建一个性别枚举,但由于某些原因变得语法错误,插入"EnumBody"完成EnumDeclaration.

public static enum Gender
{
    static
    {
        Female = new Gender("Female", 1);
        Gender[] arrayOfGender = new Gender[2];
        arrayOfGender[0] = Male;
        arrayOfGender[1] = Female;
        ENUM$VALUES = arrayOfGender;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过没有静态{}但我得到相同的语法错误.

enums android

115
推荐指数
6
解决办法
14万
查看次数

我应该严格避免在Android上使用枚举吗?

我过去常常Bundle在如下界面中定义一组相关常量(如键):

public interface From{
    String LOGIN_SCREEN = "LoginSCreen";
    String NOTIFICATION = "Notification";
    String WIDGET = "widget";
}
Run Code Online (Sandbox Code Playgroud)

这为我提供了一种更好的方法来将相关常量组合在一起并通过静态导入(而不是实现)来使用它们.我知道Android框架也使用常数在同样的方式一样Toast.LENTH_LONG,View.GONE.

但是,我经常觉得Java Enums提供更好,更强大的方式来表示常数.

但是,有没有在使用性能自动问题enumsAndroid

通过一些研究,我最终陷入困惑.从Android的性能提示Google中删除了"避免使用只需要Ints的枚举"的问题 吗?显然已经从其性能提示中删除了"避免枚举",但是从它的官方培训文档中了解内存开销部分它清楚地说:"枚举通常需要的内存是静态常量的两倍多.你应该严格避免在Android上使用枚举."这仍然很好吗?(Java在1.6之后的版本中说)

我观察到的一个问题,更是发送enumsintents使用Bundle我应该序列化给他们(即putSerializable(),我认为一个昂贵的操作比较原始的putString()方法沉绵enums提供它是免费的).

有人可以澄清哪一个是代表相同的最佳方式Android?我应该严格避免使用enumsAndroid

java enums android

90
推荐指数
5
解决办法
4万
查看次数

为什么Android不使用更多枚举?

我开始真的喜欢在代码中使用C#和Java枚举,原因如下:

  • 它们比整数,字符串或布尔标志集更加类型安全.
  • 它们导致更易读的代码.
  • 将枚举设置为无效值比使用int或string更困难.
  • 它们可以轻松发现变量或参数的允许值.
  • 我读过的所有内容都表明它们在C#和大多数JVM中的表现与整数一样好.

但是,Android框架有许多情况需要传递各种类型的标志,但它们似乎都没有使用枚举.在那里我会认为他们的使用将是有益的一对夫妇的例子是Toast.LENGTH_SHORT/ Toast.LENGTH_LONGView.GONE,View.VISIBLE等等.

为什么是这样?在Dalvik中,枚举的性能是否比简单的整数值差?还有其他一些我不知道的缺点吗?

enums android

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

如何在kotlin中使用Android支持typedef注释?

我开发Android应用程序并经常使用注释作为编译时参数检查,主要是android的支持注释.

java代码中的示例:

public class Test
{
    @IntDef({Speed.SLOW,Speed.NORMAL,Speed.FAST})
    public @interface Speed
    {
         public static final int SLOW = 0;
         public static final int NORMAL = 1;
         public static final int FAST = 2;
    }

    @Speed
    private int speed;

    public void setSpeed(@Speed int speed)
    {
        this.speed = speed;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于Android中的性能问题,我不想使用枚举.kotlin的自动转换器只生成无效代码.如何@IntDef在kotlin中使用注释?

android kotlin

33
推荐指数
3
解决办法
9369
查看次数

Android:enum vs static final int?

在Java Android应用程序中enum拥有一组static final ints 有什么优点(或缺点)?是否存在有利于使用其中一种或另一种的效率或性能优化?

我在上下文中询问了这个请求代码等等 - 它往往是Android示例代码中的内容,而不是我在C中习惯的枚举值.

java enums android

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

Kotlin Annotation IntDef

我有这个代码示例:

class MeasureTextView: TextView {
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)

    companion object{
        val UNIT_NONE = -1
        val UNIT_KG = 1
        val UNIT_LB = 0            
    }

    fun setMeasureText(number: Float, unitType: Int){

        val suffix = when(unitType){
            UNIT_NONE -> {
                EMPTY_STRING
            }
            UNIT_KG -> {
                KG_SUFIX
            }
            UNIT_LB -> {
                LB_SUFIX
            }
            else -> …
Run Code Online (Sandbox Code Playgroud)

annotations kotlin

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

Kotlin枚举类在Android中的表现

在Java中,我们被告知要严格避免在Android上使用枚举,因为它们占用了两倍的内存.

这适用enum class于Kotlin吗?将Kotlin enum编译成Java enum吗?

performance enums android kotlin

22
推荐指数
3
解决办法
4476
查看次数

proguard是否将所有枚举转换为int或需要为此配置

proguard会自动将枚举转换为整数以进行内存优化,还是我必须将其配置为执行此操作?如果我必须配置什么配置?

android proguard

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

通过aidl接口传递枚举

由于枚举不是原始类型,在Android中通过aidl接口传递枚举的最有效方法是什么?有没有办法将枚举首先转换为序数?

java primitive enums android aidl

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

在多个类中共享常量(android minesweeper)

我正在使用扩展Button创建一个类的实例,并直接访问整数变量以获得更好的性能.我正在使用常量来轻松识别变量的当前设置.

我有常量声明Button类和Activity类中实例化它们.我发现了类似的问题,并且读取它只是为了保持常量而创建一个类是不好的做法.

在两个类中使用相同的常量声明的最佳方法是什么?

我是初学程序员,所以我很有可能忽略了一个简单的解决方案.

按钮类:

public class GridButton extends Button {
  public int displayStatus;

  // constants for mine display status
  private static final int UNTOUCHED = 1;
  private static final int UNCOVERED = 2;
  private static final int FLAGGED = 3;
  private static final int HIT = 4;
  ...
}
Run Code Online (Sandbox Code Playgroud)

活动类:

public class PlayGameActivity extends Activity {      
  private GridButton[][] gridButtons;      

  // constants for mine display status
  private static final int UNTOUCHED = 1;
  private static final int UNCOVERED = 2; …
Run Code Online (Sandbox Code Playgroud)

java android constants

3
推荐指数
1
解决办法
2985
查看次数