Android アプリケーションで modbus4j を使用しています。Javaでテストする前に、正常に動作しました。しかし、Android では master.init() に問題があり、機能しません。マニフェストで、インターネットとアクセス ネットワーク状態のアクセス許可を追加します。私は多かれ少なかれ次のようなコードを持っています:
// Perform action on click
// Read IP from layout***
EditText edittext_IP = (EditText) findViewById(R.id.editText1);
TextView MWReaded = (TextView) findViewById(R.id.textView4);
// **********************
//
String slaveIP;
slaveIP = edittext_IP.getText().toString();
ModbusFactory factory = new ModbusFactory();
IpParameters params = new IpParameters();
params.setHost(slaveIP);
params.setPort(502);
params.setEncapsulated(false);
ModbusMaster master = factory.createTcpMaster(params, true);
master.setTimeout(500);
master.setRetries(2);
try {
master.init();
} catch (ModbusInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplication(),
"Error: " + e.getMessage(), 10).show();
}
ModbusLocator locator = new ModbusLocator(1,
RegisterRange.HOLDING_REGISTER, 0,
DataType.TWO_BYTE_INT_UNSIGNED);
Object xx = null;
try {
xx = master.getValue(locator);
} catch (ModbusTransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ErrorResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int Register = 0;
if (xx != null){
Register = Integer.parseInt(xx.toString());
} else{
Register = 6969;
}
MWReaded.setText(String.valueOf(Register));
TextView txttest_n = (TextView) findViewById(R.id.textView5);
txttest_n.setText("n=" + n);
n = n + 1;
}
});
しかし、マスターは決して初期化されません。例外が見られます。「android.os.NetworkOnMainThreadException」
どうすればこの問題を解決できるか知っていますか?