首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TextView setText()不执行任何操作

TextView setText()不执行任何操作
EN

Stack Overflow用户
提问于 2018-06-04 00:57:24
回答 3查看 167关注 0票数 1

我不明白为什么setText不对TextView做任何事情,而且我似乎根本没有收到任何错误。

我尝试设置文本的一个原因是,我想看看是否成功地与服务器建立了连接。

下面是我的代码:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

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

        final EditText textField = findViewById(R.id.textField);
        final Button submitBtn = findViewById(R.id.submitBtn);
        final TextView debugLbl = findViewById(R.id.debugLbl);
        final TextView debug2Lbl = findViewById(R.id.debug2);

        submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String text = textField.getText().toString();
                textField.setText("");
                Thread thread = new Thread(new Runnable() {

                    @Override
                    public void run() {
                        try  {
                            try {
                                Socket socket = new Socket("10.0.2.2", 9723);
                                OutputStream os = socket.getOutputStream();
                                OutputStreamWriter osw = new OutputStreamWriter(os);
                                BufferedWriter bw = new BufferedWriter(osw);
                                bw.write(text);
                                bw.flush();
                                debug2Lbl.setText("Successfully sent message : "+ text + " to server");
                                socket.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                                debugLbl.setText("error");
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();
            }
        });
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-06-04 02:39:27

正如@waqaslam所说的,你不能使用非UI线程来设置UI项,比如AsyncTask或其他线程。

下面是如何在AsyncTask中使用setText的一小段代码。

代码语言:javascript
复制
 runOnUiThread(new Runnable() {
            @Override
            public void run() {
                debug2Lbl.setText("Successfully sent message : "+ text + " to server");
            }
        });
票数 0
EN

Stack Overflow用户

发布于 2018-06-04 02:41:26

这是因为你没有在ui设置文本thread.it意味着你启动的线程不能执行一些ui命令,如setText,notifyDataSetChanged...

有几种解决方案:

1-复制此代码而不是您的debug2Lbl.setText("Successfully message:"+ text +“to server");

代码语言:javascript
复制
Handler mhandler=new Handler(Looper.getMainLooper);
mhandler.post(new Runnable() {
            @Override
            public void run() {
                debug2Lbl.setText("Successfully sent message : "+ text + " to server");
            }
        });

2-在uiThread.it上运行你的setText。推荐:

代码语言:javascript
复制
YourActivityName.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                debug2Lbl.setText("Successfully sent message : "+ text + " to server");
                            }
                        });

并在catch状态下为setText执行此操作。注意:我也提供给你阅读同步的类。

不要忘了检查为工作答案;)

票数 0
EN

Stack Overflow用户

发布于 2018-06-04 04:54:19

执行以下操作:

代码语言:javascript
复制
runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                debug2Lbl.setText("yourtext");
                            }
                        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档