I have an app connected with Azure backend. I created a login and some api calls 2 months ago. They worked fine until a few days ago and then it starts to fail "sometimes".
The login log onFailure says: Error while authenticating user
The callback log onFailure says: Error while processing request
And the cause of both says : stream was reset: PROTOCOL_ERROR
This post is to similar to this but didn't work.
Some code here:
LoginFragment.java
private void login(String email, String password){ loginProgressBar.setVisibility(View.VISIBLE); try { JsonObject params = new JsonObject(); params.addProperty("Username", email); params.addProperty("Password", password); ListenableFuture<MobileServiceUser> listenable = Client.logIn(getContext(), params); Futures.addCallback(listenable, new FutureCallback<MobileServiceUser>() { @Override public void onSuccess(MobileServiceUser mobileServiceUser) { loginProgressBar.setVisibility(View.GONE); SharedPreferences settings = getActivity().getSharedPreferences(Client.MS_USER,0); SharedPreferences.Editor editor = settings.edit(); Client.clientId = mobileServiceUser.getUserId(); Client.token = mobileServiceUser.getAuthenticationToken(); editor.putString(Client.MS_USER_ID, Client.clientId); editor.putString(Client.MS_AUTH_TOKEN, Client.token); editor.apply(); Client.getInstance(getContext()).setCurrentUser(mobileServiceUser); Intent i = new Intent(getContext(), MainActivity.class); startActivity(i); } @Override public void onFailure(Throwable t) { loginProgressBar.setVisibility(View.GONE); Throwable t2 = t.getCause(); Throwable t3 = t2.getCause(); Log.e("LoginFail", t.getMessage()); Log.e("LoginFail", t2.getMessage()); if(t3 != null){ Log.e("LoginFail", t3.getMessage()); } Toast.makeText(getContext(), getResources().getString(R.string.bad_login), Toast.LENGTH_LONG).show(); } }, MoreExecutors.directExecutor()); } catch (MalformedURLException e) { e.printStackTrace(); } }
Client.java
public class Client { public static final String MS_USER = "MS_USER"; public static final String MS_USER_ID = "MS_USER_ID"; public static final String MS_AUTH_TOKEN = "MS_AUTH_TOKEN"; public static String clientId; public static String token; private static MobileServiceClient instance = null; public static MobileServiceClient getInstance(Context context) { if (instance ==null){ try { instance = new MobileServiceClient(Env.AZURE_URL, context); instance.setAndroidHttpClientFactory(() -> { OkHttpClient client = new OkHttpClient(); client.setReadTimeout(20, TimeUnit.SECONDS); client.setWriteTimeout(20, TimeUnit.SECONDS); return client; }); } catch (MalformedURLException e) { e.printStackTrace(); } } else{ instance.setContext(context); } return instance; } public static ListenableFuture<MobileServiceUser> logIn(Context context, JsonObject parameters) throws MalformedURLException { String deviceID = "gcm:" + Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); parameters.addProperty("device_id", deviceID); parameters.addProperty("device_dateTime", Env.DATE_FORMAT.format(new Date())); parameters.addProperty("device_timeZone", API.getTimezone()); parameters.addProperty("device_language", Env.LANGUAGE); parameters.addProperty("app", Env.APP_NAME); return getInstance(context).login("auth", parameters); } public static ListenableFuture<JsonElement> callApi(Context context, String apiName, JsonObject parameters, String httpMethod){ if(httpMethod.equals("POST")){ String deviceID = "gcm:" + Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); parameters.addProperty("user_id", Client.clientId); parameters.addProperty("device_id", deviceID); parameters.addProperty("device_dateTime", Env.DATE_FORMAT.format(new Date())); parameters.addProperty("device_timeZone", API.getTimezone()); parameters.addProperty("device_language", Env.LANGUAGE); parameters.addProperty("app", Env.APP_NAME); parameters.addProperty("role", "Patient"); return getInstance(context).invokeApi(apiName, parameters, httpMethod, null); } else { return getInstance(context).invokeApi(apiName, null, httpMethod, null); } }