首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程到AsyncTask( android,Modbus/TCP)

线程到AsyncTask( android,Modbus/TCP)
EN

Stack Overflow用户
提问于 2013-08-21 08:57:09
回答 1查看 588关注 0票数 0

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

代码语言:javascript
复制
 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");

}

看到错误了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 08:59:26

我们不能在onBackground()期间触摸UI

depurar.setText("no conecta");

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18353026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档