TextView setText () не всегда работает - PullRequest
0 голосов
/ 23 июня 2018

У меня проблема с использованием setText(), и я отчаиваюсь. Если я нажму на b3, я объявлю тему, а затем начну ее. Код в потоке не важен, он будет считывать некоторые данные с веб-сайта и записывать их в массив о результате операции. Это работает нормально. Но прежде чем я начну тему, я хочу установить текст «Проверить ...». Но это не работает. Я написал строку setText почти везде, использовал несколько методов отсюда (например, Handler), но ни один из них не работает, и текст "Prüfe ..." не будет отображаться в моем текстовом просмотре. Пожалуйста, помогите мне!

        //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 голосов
/ 23 июня 2018

Это неудобно, в любом случае есть обходной путь для инициализации, вы можете сделать это в макете XML

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

Не могли бы вы опубликовать содержимое файла макета?

...