AsyncTask retorno de dados

1 resposta
programaçãoarduinoandroid
M

Olá, estou fazendo uma Aplicação Android juntamente com Arduino, e como sou iniciante nas duas areas possuo um codigo um tanto quanto cru ainda, mas a minha real duvida é : no meu codigo utilizei o AsyncTask para enviar dados do android para o arduino , mas gostaria de receber dados do arduino para o android, ou seja gostaria de ter um FeedBack dos meus comandos.
Ambos estao comunicando perfeitamente, porem nescessito dessa resposta do arduino.
aki estao os codigos do meu app e do arduino.

Arduino:

include <SPI.h>
include <Ethernet.h>

// A linha abaixo permite que voce defina o endereço
// fisico (MAC ADDRESS) da placa de rede
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Os valores abaixo definem o endereço IP, gateway e máscara.

// Configure de acordo com a sua rede.

IPAddress ip(192,168,3,100);         //Define o endereço IP

IPAddress gateway(192,168,3,1);    //Define o gateway

IPAddress subnet(255, 255, 255, 0); //Define a máscara de rede

int led_port = 5;

EthernetServer server(80);
void setup()

{

Ethernet.begin(mac, ip, gateway, subnet); //Inicializa o Ethernet Shield

Serial.begin(9600);

Serial.println(“Servidor on_line”);

Serial.println(Ethernet.localIP());

pinMode(led_port, OUTPUT);

}

void loop() {

EthernetClient client = server.available();
if (client) {

while (client.connected()) {
if (client.available()) {

char c = client.read();

Serial.print("Command: ");
Serial.println©;

if (c == 1) {

digitalWrite(led_port, HIGH);

Serial.println(“Led status: 1 (ON));

client.println(“Led status: 1 (ON)); //aqui envia do arduino para o android

}
if (c == 0) {

digitalWrite(led_port, LOW);

Serial.println(“Led status: 0 (OFF));

client.println(“Led status: 0 (OFF)); //aqui envia do arduino para o android

}
if (!client.connected()) {

client.stop();

}

}

}

delay(1000);

client.stop();

}

}

Android :

import android.os.AsyncTask;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.Socket;

public class MainActivity extends AppCompatActivity {

private static Socket socket;
private static PrintWriter printWriter;


String message ="";

private static String ip = "192.168.3.100";
int port = 80;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}
public void send_text(View v){

    message = "1";
    myTask mt = new myTask();
    mt.execute();
}
public void send_text2(View v){

    message = "0";
    myTask mt = new myTask();
    mt.execute();

}
class myTask extends AsyncTask<Void,Void,String>{
    
    @Override
    protected String doInBackground(Void[] params)
    {
        try {

            socket = new Socket(ip,port);
            printWriter = new PrintWriter(socket.getOutputStream());
            printWriter.write(message);
            printWriter.flush();
            printWriter.close();
            socket.close();


        }catch (IOException e) {

            e.printStackTrace();
        }

        return null;
    }
    
}

}

1 Resposta

G

Eae bleuza? Seu problema é bem simples de resolver. Se eu entendi bem vc quer que haja um retorno quando o doInBackground for concluido, nesse caso basta criar uma interface e usa-la com callback ex:

private interface AsyncCallback {
   void doInBackgroundTerminou(); // passe algum parâmetro se quiser; troque void por algum tipo se quiser.
  }

entao na classe myTask declare uma instancia de AsyncCallback e inicialize-a no construtor (que vc tera de criar) então chame doInBackgroundTerminou(); qd for conveniente pra vc. E é claro troque

myTask mt = new myTask();
     mt.execute();

por:

myTask mt = new myTask(new AsyncCallback {
          @override
          public void doInBackgroundTerminou(){
            //faça oque for necessario aqui
          } 
         });
         mt.execute();

Obs: escrevi o código aqui no site msm e n testei entao pode haver algum erro na gramatica.

Criado 11 de agosto de 2017
Ultima resposta 11 de ago. de 2017
Respostas 1
Participantes 2