Java 通过API更新TextView时调用的FromErrorThreadException

Java 通过API更新TextView时调用的FromErrorThreadException,java,android,Java,Android,我正在使用API。当我单击应用程序中的按钮时,它会调用一个同步的void,从应用程序请求数据。然后,CReceiver在实现的方法userInfo中返回数据,我将返回的数据附加到TextView中。我可以在userInfo中打印System.out.println信息,它可以工作,但是如果我尝试附加TextView,我会得到CalledFromErrorThreadException。使用此信息更新TextView的正确方法是什么 主要活动 public class MainActivi

我正在使用API。当我单击应用程序中的按钮时,它会调用一个同步的void,从应用程序请求数据。然后,CReceiver在实现的方法userInfo中返回数据,我将返回的数据附加到TextView中。我可以在userInfo中打印System.out.println信息,它可以工作,但是如果我尝试附加TextView,我会得到CalledFromErrorThreadException。使用此信息更新TextView的正确方法是什么

主要活动

    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) {
    ...
    }
使用此信息更新TextView的正确方法是什么

由于这是一项
活动
,请使用
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
     }
   });
}