从内部类访问数据

时间:2016-09-25 05:57:47

标签: java android

我使用以下代码更新TextView

if(free != "") {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            ((TextView) findViewById(R.id.TextView_TripStartStatus)).append(free + " are not free");
        }
    });
}

它给我一个错误,说它需要声明final。我可以创建一个接受final自由变量的函数并使用它。但是,我可以在这里使用任何一个班轮吗?

3 个答案:

答案 0 :(得分:2)

只需在内部类之外创建一个临时final变量:

if(free!="") {  // this is the wrong way to compare strings
    final String tempFree = free;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            ((TextView) findViewById(R.id.TextView_TripStartStatus)).append(tempFree + " are not free");
        }
    });
}

答案 1 :(得分:0)

由于您不想要单独的方法,

  1. 您可以按照shmosle的建议使用解决方案。

  2. 如果可能,您可以在封闭的班级级别声明变量free

答案 2 :(得分:-1)

但是如果活动完成,它可能会抛出NullPointerException。 首先检查当前活动是否仍然有效。

 private void appendText(final String free) {

        if(this.isFinishing()||free.equals(""))
            return;

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ((TextView) findViewById(R.id.textView)).append(free + " are not free");
                }
            });
        }

如果您不想使用方法,请使用

if(this.isFinishing()||free.equals(""))
            return;

          final String temp=free;

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ((TextView) findViewById(R.id.textView)).append(temp + " are not free");
                }
            });
相关问题