2013-08-21 1 views
0

Je travaille sur une connexion à un automate via TCP/Modbus et bibliothèque Jamod, donc j'utilise et je travaille avec des threads. J'utilise pour gérer la fonction thread AsyncTask, mais lors de l'exécution de mon code, l'application ne répond pas et se ferme automatiquement. Merci pour l'aide à l'avance =)threads à AsyncTask (android, Modbus/TCP)

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"); 

} 

voir les erreurs?

Répondre

0

Nous ne pouvons pas toucher l'interface utilisateur pendant onBackground()

depurar.setText("no conecta");

Utilisez du fil interface utilisateur ou le mettre sur onPost().