如何在 Android Studio 上使用 Mikrotik API

How to use Mikrotik API on Android Studio

我正在尝试在 android 中使用 mikrotik api Java,但是当我下载它并将其添加到 android studio 项目并在应用程序中使用它时被迫关闭!

这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final String[] string_array = getResources().getStringArray(R.array.ip_venue);
    spinner2 = findViewById(R.id.list_venue);
    spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View view, int position, long id12) {
                String Host1 = String.valueOf(string_array[arg0.getSelectedItemPosition()]);
            ApiConnection con = null; // connect to router
            try {
                con = ApiConnection.connect(SocketFactory.getDefault(), Host1, PORT, 2000);
            } catch (MikrotikApiException e) {
                e.printStackTrace();
            }
            try {
                con.login(USERNAME,PASSWORD); // log in to router
            } catch (MikrotikApiException e) {
                e.printStackTrace();
            }
            try {
                con.execute("/system/reboot"); // execute a command
            } catch (MikrotikApiException e) {
                e.printStackTrace();
            }
            try {
                con.close(); // disconnect from router
            } catch (ApiConnectionException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });
}

我收到这条消息:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.duaempatsinergi.sams.teknisi24, PID: 5947
android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
    at java.net.Socket.connect(Socket.java:586)
    at me.legrange.mikrotik.impl.ApiConnectionImpl.open(ApiConnectionImpl.java:142)
    at me.legrange.mikrotik.impl.ApiConnectionImpl.connect(ApiConnectionImpl.java:44)
    at me.legrange.mikrotik.ApiConnection.connect(ApiConnection.java:48)
    at com.duaempatsinergi.sams.teknisi24.MainActivity.onItemSelected(MainActivity.java:40)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:931)
    at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920)
    at android.widget.AdapterView.-wrap1(AdapterView.java)
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

已与目标 VM 断开连接,地址:'localhost:8620',传输:'socket'

我在这里做错了什么?我不是 Android 开发人员,但正在尝试构建对我工作的公司有用的东西。

在 android 中,您不能 运行 在主线程上执行与网络相关的操作 - 您需要在不同的线程上 运行 它们,例如:

Thread yourThread = new Thread(new Runnable() {

@Override
public void run() {
    try  {
        //Put your code in here
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
});

yourThread .start();