Я новичок в 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();
}
Что я здесь делаю не так? Я застрял здесь, и у меня есть срок завтра




Я бы посоветовал вам сделать следующее:
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.
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;
}
}