0

我正在通过 TCP / Modbus 和 Jamod 库连接到 PLC,因此我使用和处理线程。我用来处理 AsyncTask 线程函数,但是在运行我的代码时,应用程序没有响应并自动关闭。提前感谢您的帮助=)

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

}

看到任何错误?

4

1 回答 1

0

在 onBackground() 期间我们无法触摸 UI

depurar.setText("no conecta");

使用 UI 线程或将其放在 onPost() 上。

于 2013-08-21T08:59:26.233 回答