我正在使用API。当我单击我的应用程序中的按钮时,它会调用一个同步的void来请求来自应用程序的数据。然后CReceiver在实现的方法userInfo中返回数据,其中我将返回的数据附加到TextView。我可以System.out.println userInfo中的信息,它可以工作,但如果我尝试追加TextView,我得到一个CalledFromWrongThreadException。使用此信息更新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) {
...
}
答案 0 :(得分: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
}
});
}