Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
16
respostas

Usando MQTT no Tab com Fragment

Eu preciso fazer um tab (fragment) receber dados do MQTT. Tenho minha classe MQTTClient. para a atualização dos TextView, tenho uma função update que fiz, quando fiz direto no MainActivity inseria essa função, e depois o try no oncreate. Como faço isso usando tab?

16 respostas

Oi Marcos, tudo bem ?

Cara acho que a ideia é a mesma, a diferença que você precisa fazer isso dentro do fragment, é interessante você fazer apenas no momento que o fragment estiver de fato sendo visto, por exemplo no onResume

Booa Tarde Matheus, tudo certo (ou quase) kkkk e você?

No caso, eu preciso jogar essa programação dentro na minha Tab e criar o método onResume?

Desde ja agradeço pela ajuda!

Você vai colocar no fragment, que tem o ciclo de vida.

Certo.. Mas to com duvida com relação ao código, pois o que usava antes de utilizar o fragment era esse.. Se pudesse me auxiliar com o código ficaria muito agradecido.

// Código inserido no metodo OnCreate no MainActivity quando usava direto sem fragment
try {
            MQTTClient client = new MQTTClient(this);
            client.connectMQTT();

        } catch (
                Exception ex)

        {
            Log.e(TAG, ex.getMessage());


        }
    }

Função de Atualização

//Função para atualização das textview - função inserida no mainActivity também
    public void updateView(String sensorMessage, final String topic) {
        try {
            SharedPreferences sharedPref = getSharedPreferences(
                    "br.com.weathernow.weathernow.PREFERENCE_FILE_KEY", Context.MODE_PRIVATE);
            if (sensorMessage == null || sensorMessage == "") {
                sensorMessage = sharedPref.getString("lastSensorMessage", "No Activity Detected");
            }
            final String tempSensorMessage = sensorMessage;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if(topic.equals("weathernow/temperatura")){
                        TextView updatedField1 = (TextView)
                                findViewById(R.id.updated_field);
                        updatedField1.setText(tempSensorMessage);
                    }
                     else if (topic.equals("weathernow/umidade")) {
                        TextView updatedField2 = (TextView)
                                findViewById(R.id.updated_field2);
                        updatedField2.setText(tempSensorMessage);
                    }
                }
            });
            SharedPreferences.Editor editor = sharedPref.edit();
            editor.putString("lastSensorMessage", sensorMessage);
            editor.commit();
        } catch (Exception ex) {
            Log.e(TAG, ex.getMessage());
        }
    }
}

Marcos, você pode fazer isso tudo da mesma forma no fragment.

Você tem o ciclo de vida do fragment que é bem parecido com a activity, ai a ideia vai ser a mesma.

Eu fiz no Activity do tab como fiz no mainActivity quando fiz direito... Mas não funcionou.. Ele não ta atualizando as textViews... :/

Marcos,

Quando fazia na activity você fazia isso em qual método do ciclo de vida ?

No método onCreate..

No seu Fragment você pode tentar fazer no onCreateView ou no onResume!

Testa e fala para gente o que deu.

Eu testei no método onCreateView, e não tive sucesso... Inseri o try como fazia no onCreate, e ai fiz a updatedView depois, mas sem sucesso... Vou testar agora no onResume

Sem sucesso no onResume também..

Marcos, hoje, se você tentasse rodar novamente no seu oncreate o mesmo código ia rolar ?

Ia siim! O meu código que to tentando rodar no fragment, é uma cópia que fiz dele, quando ele meu app mostrava os dados apenas no mainActivity.

O que esta diferente é que criei a activity com base naquele tabbedActivity , e ai renomeei as tabs, "fiz" um layout pra elas, e estou tentado conectar ao broker para que consiga pegar os dados...

Pelo que vi, aparentemente ele não ta conseguindo startar para criar um novo cliente mqtt, e ai sim receber os dados desse jeito no fragment. Mas, criando activitys individuais, ele funciona normalmente com esse código...

Opa Marcos, blza?

E se você criasse um Fragment da mesma forma que foi criado inicialmente no curso, na mão, apenas extendendo o Fragments (Support). Eliminaria o restante que foi criado pelo android studio...

E também se debugar você consegue ver aonde ele chama primeiro...

Fiquei curioso rs. Abraço.

Opaa, pode deixar, vou fazer esse teste também! Vou fazer, e assim que fizer comento o resultado aqui kkk Abraços

solução!

Boa Noite Pessoal, Problema resolvido..

Depois de vários debugs, notei que esqueci de inserir o código de permissão do uso de internet no manifest....