1

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」

どうすればこの問題を解決できるか知っていますか?

4

0 に答える 0