Question

I'm working a connection to a PLC via TCP / Modbus and Jamod library, therefore I use and work with threads. I'm using to handle AsyncTask thread function, but when running my code the application is not responding and closes automatically. Thanks for the help in advance =)

 package com.JR.scada;



import java.net.InetAddress;



import net.wimpi.modbus.Modbus;

import net.wimpi.modbus.io.ModbusTCPTransaction;

import net.wimpi.modbus.msg.ReadInputDiscretesRequest;

import net.wimpi.modbus.msg.ReadInputDiscretesResponse;

import net.wimpi.modbus.net.TCPMasterConnection;

import android.app.Activity;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;









public class Main extends Activity{

TextView text, depurar;

EditText IP;

Button boton;





TCPMasterConnection con = null;     //the TCP connection

        ModbusTCPTransaction trans = null;  //the Modbus transaction



    InetAddress addr = null;        //direccion del esclavo

    int port = Modbus.DEFAULT_PORT;//puerto por defecto 502 





@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);



text = (TextView) findViewById(R.id.lblRegistro);

IP = (EditText) findViewById(R.id.txtIp);

depurar = (TextView) findViewById(R.id.txtdepurar);

boton = (Button)findViewById(R.id.btnVerRegistro);





}



       @Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

    protected void onStop() {

        super.onStop();

        //Close the TCP connection

        con.close();

    }





    public class conectar extends AsyncTask<String,String,Integer>{

   protected Integer doInBackground(String... urls) {

   try {

   text.setText("Entro en el try");

   //IP address;

   addr = InetAddress.getByName("212.170.50.238");

   // Open the connection

   con = new TCPMasterConnection(addr);

   con.setPort(port);

   con.connect ();







   } catch (Exception e) {

   Log.d("MODBUS","connection error", e);

   depurar.setText("no conecta");

   return 1;

   }

   return 0;

   }

   protected void onPostExecute(Integer bytes) {

   depurar.setText("conecta");

         }

    }

public void onClick(View v)  {





        conectar conectamos = new conectar();

        conectamos.execute("hola");

}

see any errors?

Était-ce utile?

La solution

We can't touch UI during onBackground()

depurar.setText("no conecta");

Use UI thread or put it on onPost().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top