Как я могу динамически изменить мой TextView? - PullRequest
0 голосов
/ 31 мая 2018

Все методы вызываются в MainActivity.В моем приложении я получаю HTML-страницу из библиотеки ion, и у меня есть несколько методов для форматирования текста, который я скачал с помощью ion.

То, что я пытаюсь сделать, это установить переменную DoveSonoв TextView, фактически на каждом цикле цикла эта переменная изменяется, поэтому TextView тоже должен меняться, но на самом деле с тем, что я сделал, происходит сбой приложения.

Это метод, который я вызываю onClick и начинаю сПолучая веб-сайт HTML, он вызывает другие методы:

       private void getHTMLArticoli(){

   //     progressDialog = new SpotsDialog(articoli.this, R.style.Custom);
   //     progressDialog.show();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {
            @Override
            public void run() {
                htmlresultart = null;
                try {
                    htmlresultart = Ion.with(getApplicationContext())
                            .load("WEBSITEIP")
                            .asString()
                            .get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                if (htmlresultart != null) {
                    htmlresultart = htmlresultart.replace("</td>", "\n");
                    getTableArticoli();
                    getTestataArticoli();
                    getBodyArticoli();

      //              progressDialog.cancel();
                }

В то время как здесь есть метод getBodyArticoli, который я вызываю в getHTMLArticoli, здесь вы можете найти часть, в которой я пытаюсь установить текст

    private void getBodyArticoli(){

        DaDoveParto = Integer.valueOf(String.valueOf(htmlresultart.indexOf("TBLCRP")));
        DoveMiFermo = Integer.valueOf(String.valueOf(htmlresultart.indexOf("</form>")));

        if(DaDoveParto == 0){
            Toast.makeText(this,"NESSUN DATO TROVATO",Toast.LENGTH_SHORT).show();
        }else
        {
            Integer i;
            Integer j;
            Integer CONTACAMPO = 0;
            for( i = DaDoveParto ; i <= DoveMiFermo ; i++){
                if( htmlresultart.substring(i, i + 4).equals("<td>")){
                    i += 4;
                    for (j = i; j <= DoveMiFermo ; j++){
                        if(htmlresultart.substring(j, j + 1).equals("\n")){

                            appBODYart[CONTACAMPO] = htmlresultart.substring(i, i + (j - i));

                            if(appBODYart[CONTACAMPO].equals("(null)")){
                                appBODYart[CONTACAMPO] = "";
                            }
                            CONTACAMPO += 1;

                            if(CONTACAMPO.equals(QuantiCampi)){
                                CONTACAMPO = 0;
                                myDB.insertArtServer(appBODYart[0], appBODYart[1], appBODYart[2], appBODYart[3], appBODYart[4], appBODYart[5],
                                        appBODYart[6], appBODYart[7], appBODYart[8]);

                                DoveSono +=0;
                                textView.setText(String.valueOf(DoveSono);
                            }
                            break;

На самом деле, когда я пытаюсь это сделать, я получаю следующую ошибку:

05-31 17: 24: 41.515 4605-4769 / com.example.igardini.visualposmobile E / AndroidRuntime: FATAL EXCEPTION: pool-2-thread-1 Процесс: com.example.igardini.visualposmobile, PID: 4605 android.view.ViewRootImpl $ CalledFromWrongThreadException: только оригинальный поток, создавший представлениеэрархия может коснуться его взглядов.на android.view.ViewRootImpl.checkThread (ViewRootImpl.java:6363) на android.view.ViewRootImpl.requestLayout (ViewRootImpl.java:874) на android.view.View.requestLayout (View.java:17view4) на androidView.requestLayout (View.java:17484) в android.view.View.requestLayout (View.java:17484) в android.view.View.requestLayout (View.java:17484) в android.view.View.requestLayout (Просмотреть.java: 17484) в android.view.View.requestLayout (View.java:17484) в android.support.constraint.ConstraintLayout.requestLayout (ConstraintLayout.java:3112) в android.view.View.requestLayout (View.java:17484) на android.widget.TextView.checkForRelayout (TextView.java:6932) на android.widget.TextView.setText (TextView.java:4083) на android.widget.TextView.setText (TextView.java:3941) на андроиде.widget.TextView.setText (TextView.java:3916) на com.example.igardini.visualposmobile.articoli.getBodyArticoli (articoli.java:121) на com.example.igardini.visualposmobile.articoli.access $ 300 (articoli.java:17) на com.example.igardini.visualposmobile.articoli $ 2.run (articoli.java:79) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolEx58)java.lang.Thread.run (Thread.java:818)

1 Ответ

0 голосов
/ 31 мая 2018

Мне просто нужно было обернуть

textView.setText(String.valueOf(DoveSono * 100 / QuanteRighe));

с

                                    runOnUiThread(new Runnable() {

                                    @Override
                                    public void run() {

                                        textView.setText(String.valueOf(DoveSono * 100 / QuanteRighe));

                                    }
                                });
...