В каком компоненте приложения Android устанавливать соединение WebSocket
Всем привет. Прошу помощи, делал Websocket клиент по этой статье: https://www.pubnub.com/blog/java-websocket-programming-with-android-and-spring-boot/
ниже код MainActivity.java
вопрос такой, почему соединение создаются хаотично и беспорядочно много раз, с момента как приложение запускается?
- как сделать, что бы соединение устанавливалось 1 раз при открытии приложения?
- как сделать, что бы устанавливалось после клика по кнопке?
package com.example.myapplication;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.example.myapplication.databinding.ActivityMainBinding;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.net.URI;
import java.net.URISyntaxException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.net.URI;
import java.net.URISyntaxException;
import tech.gusavila92.websocketclient.WebSocketClient;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private Button button;
private TextView status;
private WebSocketClient webSocketClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
button = findViewById(R.id.button2);
status = findViewById(R.id.menu_name);
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
createWebSocketClient();
}
});
}
private void createWebSocketClient() {
URI uri = null;
try {
uri=new URI("ws://217.278.177.181:1456/");
}
catch (URISyntaxException e){
e.printStackTrace();
}
webSocketClient = new WebSocketClient(uri) {
@Override
public void onOpen() {
Log.i("Websocket","Session is starting");
webSocketClient.send("Hello server!");
//status.setText("successfully connect");
}
@Override
public void onTextReceived(String message) {
Log.i("Websocket","Message received");
}
@Override
public void onBinaryReceived(byte[] data) {
}
@Override
public void onPingReceived(byte[] data) {
}
@Override
public void onPongReceived(byte[] data) {
}
@Override
public void onException(Exception e) {
}
@Override
public void onCloseReceived() {
Log.i("Websocket","Closed");
System.out.println("onCloseReceived");
}
};
webSocketClient.setConnectTimeout(10000);
webSocketClient.setReadTimeout(60000);
webSocketClient.enableAutomaticReconnection(5000);
webSocketClient.addHeader("Origin", "http://developer.example.com");
webSocketClient.connect();
}
}