Кнопка onClick () не работает, когда поток работает - PullRequest
0 голосов
/ 31 мая 2018

Я борюсь с настройкой текста TextView, поэтому сейчас я пытаюсь сделать это нажатием кнопки, но когда я запускаю поток с кнопки readWeight, кнопка updateButton не работает.

Вот мои две кнопки onClick методы:

readWeight.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        inputWindow.setText("helloooooooo worldddddd");
        //connector.run();
        System.out.println("********** PRINTING **********");

        // readWeight.setVisibility(View.INVISIBLE);
    }
});
updateButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        System.out.println("!!!!!!!!!!!!!!!"+weight+"!!!!!!!!!!!!!!!");
        inputWindow.setText(weight);
    }
});

и вот мой метод, который запускает поток, этот метод находится в другом классе:

public void run() {
    new Handler().post(new Runnable() {

        @Override
        public void run() {
            // Always cancel discovery because it will slow down a connection
            //Log.d("workkkkkk","$$$$$$$$$$$$$$$$****** printingggggg ******$$$$$$$$$$$$$$$$");
            int counter = 0;
            while (true) {
                counter++;
                try {
                    output = "";
                    //read the data from socket stream
                    //mmInStream != null && counter%10000000 == 1
                    if (mmInStream != null) {
                        mmInStream.read(buffer);
                        for (byte b : buffer) {
                            char c = (char) b;
                            if (c >= ' ' && c < 'z') {
                               // System.out.print(c);
                                output += c;
                            }

                        }
                        System.out.println();
                        Intent intent = new Intent();
                        intent.setAction("com.curie.WEIGHT_RECEIVED");
                        intent.putExtra("Output",output);

                        if (counter % 10 == 0) {

                            System.out.println(counter);

                            //InputActivity.setInputWindowText(output);
                            LocalBroadcastManager.getInstance(InputActivity.getContext()).sendBroadcastSync(intent);

                        }


                    }
                    // Send the obtained bytes to the UI Activity
                } catch (IOException e) {
                    //an exception here marks connection loss
                    //send message to UI Activity
                    break;
                }
            }
        }

Любая помощь будет принята с благодарностью!спасибо.

1 Ответ

0 голосов
/ 01 июня 2018

Когда вы используете

Handler.post()

Он работает в потоке пользовательского интерфейса, поэтому, если это долгое действие, он заблокирует весь интерфейс.Чтобы избежать этого, вы должны запустить его в другом потоке.Если вы не хотите использовать что-то сложное, вы можете попробовать это:

mHandler = new Handler();

new Thread(new Runnable() {
   @Override
   public void run () {
     mHandler.post(new Runnable() {
      @Override
      public void run () {
        // place your action here
      }
     });
   }
 }).start();
...