TextView setText()并非始终有效

时间:2018-06-23 15:18:21

标签: java android textview java-threads

使用setText()时遇到问题,我感到绝望。 如果单击b3,我将声明一个线程,然后启动它。线程中的代码并不重要,它将从网站上读取一些数据并将其写入有关操作结果的数组中。 一切正常。但是在启动线程之前,我想将文本设置为“ Check ...”。但这是行不通的。我几乎在所有地方都写了setText行,从这里开始使用了几种方法(例如Handler),但是没有一个起作用,并且文本“Prüfe...”不会显示在我的textview中。 请帮助我!

        //Textfelder und Standardtext
    textEingabe = (TextView) findViewById(R.id.editText);
    textInfo = (TextView) findViewById(R.id.textInfo);
    textInfo.setText("Voraussetzungen: Arduino muss einmal durchgelaufen sein. Außerdem müssen sich Handy und Arduino im selben Netzwerk befinden um die Werte abzurufen. Wenn dies alles erfüllt ist und im Textfeld die richtige IP" +
            " ist, auf IP prüfen drücken.");

    //Prüfbutton versucht Werte von Website URL abzurufen und speichert die Werte und setzt je nach Ausgang einen aktualisierten Text.
    Button b3 = (Button) findViewById(R.id.buttonIP);
    b3.setVisibility(VISIBLE);
    b3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            urlString = textEingabe.getText().toString();
                Thread thread = new Thread() {
                    @Override
                    public void run() {

                        pruefen = false;
                        try {
                            //URL erstellen
                            URL url = new URL(urlString);
                            URLConnection urlconnection = url.openConnection();
                           urlconnection.setReadTimeout(5000);
                           urlconnection.setConnectTimeout(10000);
                            // Öffnet URL Stream und liest Website aus
                            BufferedReader in = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
                            String str;
                            boolean isWinkel = true;
                            int j=0;
                            int i=0;
                            //wenn Werte mit .beginnen sind es Winkel oder Abstände und werden bis zum nächsten Punkt in der Zeile ausgelesen.
                            while ((str = in.readLine()) != null) {
                                //0 ist Winkel
                                //1 ist Abstand
                                if (str.charAt(j) == '.') {
                                    pruefen=true; //da . vorhanden ist sind auch Daten vorhanden
                                    j++;
                                    String work="";
                                    do {
                                        work = work + str.charAt(j);
                                        j++;
                                        if (str.charAt(j) == '.') break;
                                    } while  (str.charAt(j) != '.');
                                    if (isWinkel)  {
                                        werte2[0][i]=Integer.valueOf(work);
                                        isWinkel = !isWinkel;

                                    }
                                    else {
                                        werte2[1][i]=Integer.valueOf(work);
                                        isWinkel = !isWinkel;
                                        i++;
                                    }
                                    j=0;

                                }
                            }
                            in.close();
                        } catch (MalformedURLException e) {
                        } catch (SocketTimeoutException e) {
                        } catch (IOException e) {
                        }
                    }
                };






            textInfo.setText("Prüfe...");
                thread.start();

            try {
                thread.join(); //Wartet auf Thread-Ende
            } catch (InterruptedException e) {
            }
            //Setzt Text abhängig vom Ausgang
            if (pruefen) {
                mv.setWerte(werte2);
                textInfo.setText("Prüfung abgeschlossen. Bitte nun auf den Knopf Radar generieren drücken.");
                b2.setVisibility(View.VISIBLE);
            }
            else {
                textInfo.setText("Prüfung war nicht erfolgreich. Bitte eine gültige IP im Format: http://xxx.xxx.xxx.xxx eingeben und sicherstellen, dass eine Verbindung zur Website hergestellt werden kann.");
            }    

1 个答案:

答案 0 :(得分:0)

这很尴尬,无论如何都有初始化的解决方法,您可以在XML布局中完成

<TextView
    android:id="@+id/textInfo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Check" />

您可以发布布局文件的内容吗?