Как исправить «com.android.volley.TimeoutError» в Android при попытке выполнить вход в системуJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить «com.android.volley.TimeoutError» в Android при попытке выполнить вход в систему

Сообщение Anonymous »


Я использую сервер xampp в качестве локального хоста, и у меня есть приложение для Android, которое должно подключаться к базе данных MySQL (где я сохранил некоторых пользователей) и входить в нее, используя учетные данные пользователя или в качестве гостя. Приложение находится в студии Android и работает нормально, но после выполнения запроса с использованием URL-адреса обработчик возвращает ошибку:

com.android.volley.TimeoutError

Этот URL-адрес работает, потому что у меня есть другое Java-приложение, которое делает то же самое (через ПК, а не Android), используя Maven для подключения базы данных и Tomcat в качестве локального хоста.

Я думал, что политика повторных попыток может быть возможным решением, но я не знаю, как реализовать ее в этой конкретной ситуации. Я попытался изменить URL-адрес с «http://10.0.2.2:8080/TWEB_project_master_war_exploded/» на «http://localhost:8080/TWEB_project_master_war_exploded/» безрезультатно и проверить наличие ошибок в логарифме, но ничего не нашел, за исключением предупреждение «null, url= http://10.0.2.2:8080/TWEB_project_maste ... tion=guest» .

Кто-нибудь, кто хорошо разбирается в Android (Java), может помочь мне решить эту проблему?

Мой код входа:

публичный класс LoginActivity расширяет AppCompatActivity { личное EditText account_field, pw_field; частный контекст ctx; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_login); //Контекст ctx = getApplicationContext(); //Текстовое поле аккаунта account_field = findViewById(R.id.account); //Текстовое поле пароля pw_field = findViewById(R.id.pw); //Установка куки CookieHandler.setDefault(новый CookieManager()); //Кнопка входа findViewById(R.id.login_btn).setOnClickListener(v -> login("auth")); //Кнопка гостевого входа findViewById(R.id.guest_login_btn).setOnClickListener(v -> login("гость")); //Флажок для отображения пароля в текстовом поле ((CheckBox) findViewById(R.id.show_psw)). setOnCheckedChangeListener((compoundButton, b) -> { если (б) { pw_field.setTransformationMethod( HideReturnsTransformationMethod.getInstance()); } еще { pw_field.setTransformationMethod( Метод Трансформации Пароля.getInstance()); } }); } частная пустота handleLoginResponse (JSONObject jsonResult) { пытаться { Строковый статус = jsonResult.getString("результат"); переключатель (статус) { случай «успех»: String toastText = "Войти успешно!"; Строка аккаунта = ""; //Намерение перенести пользователя в MainActivity Намерение inte = новое намерение (ctx, MainActivity.class); //Получаем информацию о пользователе JSON и его роли, //чтобы отличить гостя от логина пользователя JSONObject userLogged = jsonResult.getJSONObject("пользователь"); Строковая роль = userLogged.getString("роль"); if (!role.equals("осмотр")){ учетная запись = userLogged.getString("учетная запись"); toastText += "(доступ к учетной записи " + учетная запись + ")"; System.out.println("Пользователь вошел в систему: " + учетная запись); } еще{ toastText += "(доступ, как только)"; System.out.println("Гостевой вход"); } System.out.println("Роль: " + роль); inte.putExtra("роль", роль); inte.putExtra("учетная запись", учетная запись); Toast.makeText(ctx, toastText, Toast.LENGTH_LONG).show(); startActivity (инте); заканчивать(); перерыв; случай «недействительное_действие»: Toast.makeText(ctx, "Неверный вход в систему!", Toast.LENGTH_LONG).show(); перерыв; случай «invalid_credentials»: Toast.makeText(ctx, "ошибки имени пользователя или пароля!", Toast.LENGTH_LONG).show(); перерыв; случай «illigal_credentials»: Toast.makeText(ctx, "Аккаунт Nessun trovato!", Toast.LENGTH_LONG).show(); перерыв; } } catch (редактор JSONException) { ed.printStackTrace(); } } частный недействительный вход в систему (строковое действие) { //Входная точка // утилита входа в систему проверяет текст текстового поля Строковый URL = "http://10.0.2.2:8080/TWEB_project_master_war_exploded/" + "login?action=" + действие; если (action.equals("auth")) { Строковый аккаунт = account_field.getText().toString(); Строка pw = pw_field.getText().toString(); if (!(TextUtils.isEmpty(account) || TextUtils.isEmpty(pw))) { URL += "&account=" + аккаунт + "&пароль=" + пароль; } еще { Toast.makeText(ctx, "Вставьте имя пользователя и пароль", Toast.LENGTH_LONG).show(); возвращаться; } } Строка urlReq = URL; RequestManager.getInstance(ctx).makeRequest(Request.Method.POST, URLReq, (Response.Listener) this::handleLoginResponse ); } } RequestManager, который обрабатывает запросы на вход:

публичный класс RequestManager { частный окончательный контекст ctx; частный RequestManager (Контекст ctx) { this.ctx = ctx; } общедоступный статический синхронизированный RequestManager getInstance (Context ctx) { Log.d("in RequestManager.getInstance", "Новый RequestManager " + "экземпляр был вызван"); вернуть новый RequestManager(ctx); } Private void handleError (ошибка VolleyError, строковый URL) { Toast.makeText(ctx, "Nessuna connessione trovata o " + "ошибка на сервере", Toast.LENGTH_LONG).show(); System.err.println(error.getMessage() + ", url = " + url); } частный void handleResponse (JSONObject obj, SuccessHandler успехHandler){ пытаться { Строковый результат = obj.getString("результат"); переключатель (результат){ случай «успех»: успехHandler.handle(объект); перерыв; случай «no_user»: Toast.makeText(ctx, R.string.no_user_result, Toast.LENGTH_LONG).show(); Намерение я = новое намерение (ctx, LoginActivity.class); ctx.startActivity(я); перерыв; случай «неверный_объект»: Toast.makeText(ctx, R.string.invalid_object_result, Toast.LENGTH_LONG).show(); перерыв; случай «not_allowed»: Toast.makeText(ctx, R.string.not_allowed_result, Toast.LENGTH_LONG).show(); перерыв; случай «params_null»: Toast.makeText(ctx, R.string.params_null_result, Toast.LENGTH_LONG).show(); перерыв; случай «query_failed»: Toast.makeText(ctx, R.string.query_failed_result, Toast.LENGTH_LONG).show(); перерыв; //Особый случай запроса на вставку случай «инвалид_чекс»: Toast.makeText(ctx, R.string.invalid_checks_result, Toast.LENGTH_LONG).show(); перерыв; случай «недействительный_курс_учитель_для_урока»: Toast.makeText(ctx, R.string.invalid_course_teacher_for_lesson_result, Toast.LENGTH_LONG).show(); перерыв; случай «slot_busy»: Toast.makeText(ctx, R.string.slot_busy_result, Toast.LENGTH_LONG).show(); перерыв; } } catch (IllegalStateException | JSONException e) { е.printStackTrace(); } } //Версия с собственным обработчиком ошибок public void makeRequest(метод int, Строковый URL, Прослушиватель Response.Listener, Response.ErrorListener errorListener){ JsonObjectRequest objReq = новый JsonObjectRequest(метод, URL, ноль, прослушиватель, errorListener); objReq.setTag(R.string.network_tag); отменитьВсеЗапросы(); Log.d("в RequestManager.makeRequest", "Новый запрос" + «запрошен»); NetworkSingleton.getInstance(ctx).addToRequestQueue(objReq); } //Версия с обработчиком ошибок по умолчанию //(это handleError (ошибка VolleyError, строковый URL)) public void makeRequest (метод int, строковый URL, Прослушиватель Response.Listener){ makeRequest(метод, URL, слушатель, ошибка -> handleError(ошибка, URL)); } //Версия с обработчиком ошибок и ответов по умолчанию //(единственное, что нужно указать, это то, как "успех" случай // нужно обработать) public void makeRequest (метод int, строковый URL, SuccessHandler успехHandler){ makeRequest(метод, URL, успех -> handleResponse(успех, успехHandler), ошибка -> handleError(ошибка, URL)); } //Метод отмены всех запросов в очереди общественная недействительность cancelAllRequests(){ Log.d("в RequestManager.cancelAllRequests", "Входящие " + «Сброс очереди запросов»); NetworkSingleton.getInstance(ctx).cancelAll(); } } Моя одноэлементная сеть, которая используется для создания экземпляра для вызова http:

public class NetworkSingleton { частная RequestQueue requestQueue; частный окончательный контекст ctx; частный NetworkSingleton (Контекст ctx) { this.ctx = ctx; requestQueue = getRequestQueue(); } статическая синхронизированная NetworkSingleton getInstance (контекст контекста) { Log.d("in getInstance", "New NetworkSingleton " + "экземпляр был вызван"); вернуть новый NetworkSingleton(контекст); } RequestQueue getRequestQueue() { если (requestQueue == null) { requestQueue = Volley.newRequestQueue(ctx.getApplicationContext()); } возврат запросаОчередь; } void addToRequestQueue(Request req) { getRequestQueue().add(req); } недействительный отменитьВсе() { getRequestQueue().cancelAll(R.string.network_tag); getRequestQueue().stop(); getRequestQueue().start(); } } Я ожидаю, что приложение выполнит метод handleLoginResponse в LoginActivity и подключится.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как исправить «com.android.volley.TimeoutError» в Android при попытке выполнить вход в систему
    Anonymous » » в форуме Android
    0 Ответы
    147 Просмотры
    Последнее сообщение Anonymous
  • Не удалось решить: com.android.volley:volley:1.1.1.
    Anonymous » » в форуме Android
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Volley JsonArrayRequest выдает ошибку com.android.volley.ServerError
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Реагировать на родной Не удалось найти com.android.volley:volley:1.1.1
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Реагировать на родной Не удалось найти com.android.volley:volley:1.1.1
    Anonymous » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»