Skip to content
Advertisement

How can I run a java.class from Main Activity

I’m a beginner at Android Development and hoping someone can help me a bit out.

I want to connect to a local server (IP). I found a code in GitHub that supposedly would do this connection. But the thing is that this is a java.class and not in my MainActivity. So when I run my app in the emulator now, nothing happens. How can I run the Java.class from inside my MainActivity?

Here is the source: https://github.com/calimero-project/introduction/tree/master/src/main/java

Class:

public class CreateTunnelingLink
{

    /**
     * Local endpoint, replace the IP address with your actual address. The local socket address is important for
     * multi-homed clients (several network interfaces), or if the address via InetAddress.getLocalHost is not useful.
     */
    private static final InetSocketAddress local = new InetSocketAddress("192.168.10.13", 3671);

    /**
     * Specifies the KNXnet/IP server to access the KNX network, insert your server's actual host name or IP address,
     * e.g., "192.168.1.20". The default port is where most servers listen on for new connection requests.
     */
    private static final InetSocketAddress server = new InetSocketAddress("myKnxServer.myHome",
            KNXnetIPConnection.DEFAULT_PORT);

    public static void main(final String[] args)
    {
        System.out.println("This example establishes a tunneling connection to the KNXnet/IP server " + server);

        // A KNX tunneling link supports NAT (Network Address Translation) if required.
        // We also indicate that the KNX installation uses twisted-pair (TP) medium, with TP1 being the most common.
        // KNXNetworkLink is the base interface implemented by all supported Calimero links to a KNX network.
        try (KNXNetworkLink knxLink = KNXNetworkLinkIP.newTunnelingLink(local, server, false, TPSettings.TP1)) {
            System.out.println("Connection established to server " + knxLink.getName());
            System.out.println("Close connection again");
        }
        catch (KNXException | InterruptedException e) {
            // KNXException: all Calimero-specific checked exceptions are subtypes of KNXException

            // InterruptedException: longer tasks that might block are interruptible, e.g., connection procedures. In
            // such case, an instance of InterruptedException is thrown.
            // If a task got interrupted, Calimero will clean up its internal state and resources accordingly.
            // Any deviation of such behavior, e.g., where not feasible, is documented in the Calimero API.

            System.out.println("Error creating KNXnet/IP tunneling link: " + e);
        }
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


}

Advertisement

Answer

Try this

public class MainActivity extends AppCompatActivity {

    private static final InetSocketAddress local = new InetSocketAddress("192.168.10.13", 3671);
    private static final InetSocketAddress server = new InetSocketAddress("myKnxServer.myHome",
            KNXnetIPConnection.DEFAULT_PORT);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // call your method to do the task
        yourMethodForMakingConnection();
    }

// for better separation you can create a method for this task
private void yourMethodForMakingConnection() {
        System.out.println("This example establishes a tunneling connection to the KNXnet/IP server " + server);

        // A KNX tunneling link supports NAT (Network Address Translation) if required.
        // We also indicate that the KNX installation uses twisted-pair (TP) medium, with TP1 being the most common.
        // KNXNetworkLink is the base interface implemented by all supported Calimero links to a KNX network.
        try (KNXNetworkLink knxLink = KNXNetworkLinkIP.newTunnelingLink(local, server, false, TPSettings.TP1)) {
            System.out.println("Connection established to server " + knxLink.getName());
            System.out.println("Close connection again");
        }
        catch (KNXException | InterruptedException e) {
            // KNXException: all Calimero-specific checked exceptions are subtypes of KNXException

            // InterruptedException: longer tasks that might block are interruptible, e.g., connection procedures. In
            // such case, an instance of InterruptedException is thrown.
            // If a task got interrupted, Calimero will clean up its internal state and resources accordingly.
            // Any deviation of such behavior, e.g., where not feasible, is documented in the Calimero API.

            System.out.println("Error creating KNXnet/IP tunneling link: " + e);
        }
}


}

This should work if the code is correct. Think of the onCreate function of your Activities as the main function. You don’t need another class for a task that small.

Or else, you can otherwise also just create an instance of that class inside your onCreate method in the MainActivity and just call the main method that establishes the connection from that class with the object.

Either way, you’ll be able to do it.

You can learn more about the basics of Android Development, Activity, and Android Activity lifecycle so that you can understand this better.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement