Solucionado (ver solução)
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....