2013-01-17 83 views
0

我正在使用API​​。當我點擊我的應用程序中的按鈕時,它會調用一個同步的void來從應用程序請求數據。數據然後由CReceiver在實現的方法userInfo中將返回的數據附加到TextView中返回。我可以System.out.println在userInfo中的信息,它的工作原理,但如果我嘗試附加TextView,我得到一個CalledFromWrongThreadException。用這些信息更新TextView的正確方法是什麼?CalledFromWrongThreadException通過API更新TextView時

MainActivity

public class MainActivity extends Activity implements CReceiver { 
     private CSocket c_client = new CSocket(this); 
     private TextView textLog; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      Button btnReqUser = (Button) findViewById(R.id.btnReqUser); 

      textLog = (TextView) findViewById(R.id.textLog); 

      btnReqUser.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        c_client.reqUser("roger"); 
       } 
      }); 
     } 

     @Override 
     public void userInfo(String firstName, String lastName, String address, String phone) { 
     // TODO Auto-generated method stub 
     textLog.append(firstName + " " + lastName + " " + address + " " + phone);  
     } 
    } 

的CSocket

public synchronized void reqUser(String userName) { 
    ... 
    } 

回答

2

什麼是更新與該信息的TextView的正確方法?

由於這是一個Activity,使用runOnUiThread()

@Override 
    public void userInfo(String firstName, String lastName, String address, String phone) { 
    runOnUiThread(new Runnable() { 
    public void run() { 
     // do something here with your TextView 
    } 
    }); 
}