Socket.io не подключается в android, как подключить сокет в android?

Я новичок в socket.io Я пробовал все, с чем сталкивался, но все равно это неверно, когда используется функция connected ().

Я проверил разрешения, которые у меня есть:

<uses-permission android:name = "android.permission.INTERNET"/> <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />

Я также использовал: android:usesCleartextTraffic = "true"

Это мой код:

public class LoginFragment extends Fragment {

    FragmentLoginBinding binding;
    private NavController controller;
    private Socket socket;
    {
        try {
            socket = IO.socket(TimeAndData.getSocketURL());// it's something like this "http://xxx.xxx.xxx.xxx:xxxx"
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        controller = Navigation.getInstance().getController();
        binding = FragmentLoginBinding.inflate(getLayoutInflater(),container,false);

        socket.connect();

        binding.loginBtn.setOnClickListener(v -> {
            if (!binding.etUsername.getText().toString().isEmpty()) {
                if (!binding.etPass.getText().toString().isEmpty()) {
                    binding.loginBtn.setClickable(false);
                    submit();
                }
            }
        });



        return binding.getRoot();
    }

    private void submit() {
        binding.progressBar.setVisibility(View.VISIBLE);
        RequestQueue rq = Volley.newRequestQueue(requireContext());

        StringRequest jor = new StringRequest(Request.Method.POST, TimeAndData.getLoginURL(), responseStr ->  {

            JsonObject object = new Gson().fromJson(responseStr, JsonObject.class);
            binding.progressBar.setVisibility(View.GONE);
            if (object.get("status").getAsInt()==200) {

                TimeAndData.setDisplayName(object.get("displayName").getAsString());
                TimeAndData.setBalance(object.get("balance").getAsString());
                TimeAndData.setFullName(object.get("fullName").getAsString());
                TimeAndData.setUserId(object.get("userId").getAsString());
                TimeAndData.setUserName(object.get("userName").getAsString());


                initSocket(object.get("userId").getAsString());

                //controller.navigate(R.id.navigation_choice);
            }else if (object.get("status").getAsInt()==401){
                Toast toast = Toast.makeText(requireContext(), object.get("msg").getAsString(),Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.TOP,0,0);
                toast.show();
                binding.progressBar.setVisibility(View.GONE);
                binding.loginBtn.setClickable(true);
            }else {
                Toast toast = Toast.makeText(requireContext(), "Internal Server Error",Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.TOP,0,0);
                toast.show();
                binding.progressBar.setVisibility(View.GONE);
                binding.loginBtn.setClickable(true);
            }


        }, error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_SHORT).show()){
            @Override
            public String getBodyContentType() {
                return "application/x-www-form-urlencoded";
            }

            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String>  params = new HashMap<>();
                params.put("userName", binding.etUsername.getText().toString());
                params.put("password", binding.etPass.getText().toString());

                return params;
            }
        };

        rq.add(jor);
    }

    private void initSocket(String agent_id) {


        
        Toast toast = Toast.makeText(requireContext(), String.valueOf(socket.connected()),Toast.LENGTH_SHORT);//shows false
        toast.setGravity(Gravity.TOP,0,0);
        toast.show();
}

Что я здесь делаю не так? Я застрял здесь, и у меня есть срок завтра

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы посоветовал вам сделать следующее:

  1. Check your socket is correct and working , you can check it in any website or software to make sure socket is being connected. If your socket url is working then do this second step.

  2. Initialise and connect socket in application class like this.

а) Упомяните класс приложения в манифесте.

б) Создайте класс и используйте этот класс в своем проекте.

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;


public class ApplicationClass extends Application {
    public static final String TAG = ApplicationClass.class.getSimpleName();
    private static ApplicationClass mInstance;
    public static io.socket.client.Socket mSocket;

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);

    }

    @Override
    public void onCreate() {
        super.onCreate();
        initializeSocket();
        mInstance = this;
    }

    private void initializeSocket() {
        IO.Options options = new IO.Options();
        options.forceNew = true;
        options.reconnection = true;
        options.reconnectionDelay = 2000;
        options.reconnectionDelayMax = 5000;
        try {
            mSocket = IO.socket(WebAPIUrls.SOCKET_URL);
            mSocket.on(Socket.EVENT_CONNECT, onConnect);
            mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
            mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
            mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
            if (!mSocket.connected()){
                mSocket.connect();
            }
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }

    }
    public Emitter.Listener onConnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.d(TAG, "Socket Connected!");
        }
    };

    private Emitter.Listener onConnectError = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.d(TAG, "onConnectError");
        }
    };
    private Emitter.Listener onDisconnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Log.d(TAG, "onDisconnect");
           /* if (!mSocket.connected()){
                mSocket.connect();
            }*/
        }
    };
   

    public static synchronized ApplicationClass getInstance() {
        ApplicationClass appController;
        synchronized (ApplicationClass.class) {
            appController = mInstance;
        }
        return appController;
    }
   
    public static Socket returnSocketInstance() {
        return mSocket;
    }

}

Другие вопросы по теме

Как отладить исходный код неизвестного вам проекта android?
WithContext (Dispatchers.IO) как использовать для комнаты
Как мне заставить recyclerView Pinch масштабировать несколько дочерних элементов с помощью событий щелчка для каждого дочернего элемента?
Невозможно создать адаптер вызова для класса java.lang.Object - дооснащение
Ошибка компиляции: невозможно получить доступ к com.prolificinteractive.materialcalendarview.OnDateSelectedListener, который является супертипом
Получение ошибки при попытке запустить приложение для Android с помощью флаттера
Добавлена ​​зависимость, по-прежнему показывающая класс или интерфейс, ожидаемый в случае ViewModel в студии Android
Retrofit2: - Нужно ли мне закрывать соединение, если добавлен собственный перехватчик?
Ошибка КЛАССА АДАПТЕРА отображается в LOGCAT, а ДАННЫЕ не отображаются в RECYCLERVIEW
Как увеличить размер кнопки при нажатии кнопки? пожалуйста, помогите мне