从内部类访问数据



我使用以下代码更新TextView:

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

它给我一个错误,说它需要被声明为final。我可以创建一个接受final自由变量的函数并使用它。但是这里有什么我可以用的吗?

在内部类之外创建一个临时的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. 您可以使用shmolle建议的溶液

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

但是它可能会在活动结束的情况下抛出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");
                }
            });
        }

如果您不想使用method,则使用

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");
                }
            });

最新更新