2013-12-22 4 views
0

привет. Я хочу использовать переменную и улавливать некоторые данные в другой внутренней области и использовать ее для другого места в основной области, но моя проблема заключается в том, когда я настраиваю свою переменную во внутренней области, она будет забыть о возможности.Использовать переменную из области видимости в java

public class ...{ 
    static TextView txt1; 
    static String i="Z0"; 

    static Handler UIupdater = new Handler() { 
     @Override 
     public void handleMessage(Message msg) {    
     //some data 
      i ="Z1"; 
     } 
    }; 

    txt1 = (TextView) findViewById(R.id.txt1); 
    txt1.setText(i+"");//still get "Z0" 

} 

Я хочу видеть «Z1», но он показывает «Z0». Каково решение?

+0

Вы уверены, что обработчик вызывается? – ben4808

+0

Добро пожаловать в SO! Если ваш вопрос напрямую связан с языком, отметьте его языком. –

+0

да, я использовал обработчик, мои коды тоже есть – user2930731

ответ

1

Проблема заключается в том, что линия txt1.setText(i+""); запускается во время загрузки класса, в то время как линия i ="Z1"; не запускается, пока обработчик фактически не получает сообщение — слишком поздно, чтобы повлиять на txt1.

Решение состоит в том, чтобы переместить или скопировать i = "Z1" в часть программы, которая запускается ранее, или переместить или скопировать txt1.setText(i+""); в часть программы, которая запускается позже. Например:

public void handleMessage(Message msg) { 
     i = "Z1"; 
     txt1.setText(i); 
    } 
+0

обработчик всегда работает (он улавливает данные из моего сокета), поэтому «i» должно быть «Z1». и txt1.setText (i); просто для монитора и шоу, на самом деле он будет использоваться для другой функции, которую невозможно определить в handleMessage() { – user2930731

0

попробовать это

 

     public class ...{ 
     static TextView txt1; 
     static String i="Z0"; 

     static Handler UIupdater = new Handler() { 
      @Override 
      public void handleMessage(Message msg) {    
      //some data 
       i ="Z1"; 

      txt1 = (TextView) findViewById(R.id.txt1); 
      txt1.setText(i+"");//still get "Z0" 

      } 
     }; 

} 
+0

Я ответил за это для предыдущего ответа дополнительно txt1 = (TextView) findViewById (R.id.txt1); строка не может быть определена в HandlerMessage – user2930731

Смежные вопросы