2015-06-23 40 views
0

我嘗試更新我在線程的TextView,但沒能做到,下面的代碼UI線程顯示了我嘗試無法更新的Android

final Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
    String add = null; 

    public void run() { 
     add = Util.getLocationCityName(String.valueOf(ltlng.latitude),String.valueOf(ltlng.longitude)); 

     handler.post(new Runnable() { 
      public void run() { 

       LogUtil.d("add" + add);//i can get the add value 
       vImei.setText(add); 
      } 
     }); 
    } 
}; 

new Thread(runnable).start(); 

我可以能夠得到附加價值這裏面處理器,但值沒有更新我的TextView的,不知道是什麼錯誤,我已經做了

+0

使用沒有ü嘗試'runOnUiThread(新的Runnable)'方法 –

+0

我曾嘗試沒有運氣:( – Madhu

回答

2

嘗試初始化處理與彎針

final Handler handler = new Handler(Looper.getMainLooper()); 

你也可以試試:

private LooperThread mLooperThread; 

class LooperThread extends Thread 
{ 
    public Handler mHandler; 

    public void run() 
    { 
     Looper.prepare(); 

     mHandler = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       vImei.setText(msg.getData().getString("ADD")); 
      } 
     }; 

     Looper.loop(); 
    } 
} 

創建活套:

mLooperThread = new LooperThread(); 
    mLooperThread.start(); 

,當你需要更新:

  Bundle bundle = new Bundle(); 
      bundle.putString("ADD", add); 
      Message msg = Message.obtain(); 
      msg.setData(bundle); 
      mLooperThread.mHandler.sendMessage(msg); 
+0

不,這是行不通的,再次我能夠得到添加的價值,而不是在textview更新 – Madhu

+0

@Madhu你是什麼意思「可以獲得附加價值」? –

+0

@Madhu是'add'值不是空的?我的意思是不是''''? –

1
//Global Initialize 
String add = "";// not null 

final Handler handler = new Handler(); 
           Runnable runnable = new Runnable() { 


            public void run() { 
             add = Util.getLocationCityName(
               String.valueOf(ltlng.latitude), 
               String.valueOf(ltlng.longitude)); 

             handler.post(new Runnable() { 
              public void run() { 

               LogUtil.d("add" + add);//i can get the add value 
               vImei.setText(add); 
              } 
             }); 
            } 
           }; 

           new Thread(runnable).start(); 

我希望它能幫助你.. :)

+0

我已初始化添加 – Madhu

+0

@Madhu: - 是否全球宣佈?你必須「添加」全局聲明的參數。 –

+0

沒有它的力量工作 – Madhu

1

請試試這個,

final Handler handler = new Handler(); 
          Runnable runnable = new Runnable() { 
           String add = null; 

           public void run() { 
            add = Util.getLocationCityName(
              String.valueOf(ltlng.latitude), 
              String.valueOf(ltlng.longitude)); 

            runOnUiThread(new Runnable(){ 
     public void run() { 
      LogUtil.d("add" + add);//i can get the add value 
              vImei.setText(add); 
     } 
    }); 
           } 
          }; 

          new Thread(runnable).start(); 
1

解決了你的問題的其他解決方案的的AsyncTask

AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>(){ 

     @Override 
     protected String doInBackground(Void... params) { 
      // runs on its own thread 
      return Util.getLocationCityName(
        String.valueOf(ltlng.latitude), 
        String.valueOf(ltlng.longitude)); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      // runs on the UI Thread to Update your Views 
      LogUtil.d("add" + result); 
      vImei.setText(result); 

     } 
    }; 

    asyncTask.execute(); 
+0

在這裏我也可以得到添加的價值,但它不在textview中更新 – Madhu

+0

這很奇怪。但是如果你不使用線程,你的代碼是有效的嗎? – FlanschiFox