Ошибка сети на некоторых устройствах после сборки - PullRequest
1 голос
/ 17 марта 2019

Я установил приложение после сборки на разных устройствах (Android), приложение открывается нормально, но при отправке сетевого запроса только одно устройство может отправить успешно, остальные остаются без ответа. Я использую Rest.post(), чтобы отправить этот конкретный запрос. Используя кодовое имя 6.0, но обновил его сегодня утром, поэтому я буду использовать последнюю версию. Примечание: ситуация произошла до обновления. я добавил кучу вещей, пытаясь найти проблему. Вот код:

//...Login button ActionListner
gui_Button_login.addActionListener((ae)->{
        gui_Infinite_Progress.setVisible(true);
        gui_Infinite_Progress.setEnabled(true);
        gui_Button_login.setEnabled(false);
        gui_Text_Field_username.setEnabled(false);
        gui_Text_Field_Password.setEnabled(false);
        if(doLogin()){
            Handle.UserFeed = new UserFeedForm();
            Handle.UserFeed.show();
        }else{
            gui_Button_login.setEnabled(true);
            gui_Text_Field_username.setEnabled(true);
            gui_Text_Field_Password.setEnabled(true);
            gui_Infinite_Progress.setVisible(false);
            gui_Infinite_Progress.setEnabled(false);
        }
    });
//...Do login function
private boolean doLogin(){
    String usr_username = gui_Text_Field_username.getText();
    String usr_password = gui_Text_Field_Password.getText();
    Map<String, Object> signInData = new HashMap<>();
    signInData.put("usr_username", usr_username);
    signInData.put("usr_password", usr_password);
    String signInDataJSON = JSONParser.mapToJson(signInData);

    gui_Span_Label_Debug.setText(gui_Span_Label_Debug.getText() +"\nData:\n"+ signInDataJSON);
    gui_Span_Label_Debug.setText(gui_Span_Label_Debug.getText() +"\nSending...");
    Response<Map> response = Rest.post(Data.API_SIGNIN_URL)
            .jsonContent()
            .body(signInDataJSON)
            .acceptJson()
            .onErrorCodeJSON(err->{
                ToastBar.showErrorMessage(err.getResponseErrorMessage(), Data.MESSAGE_ERROR_TIMEOUT);
                //gui_Span_Label_Debug.setText(gui_Span_Label_Debug.getText() +"\nError:\n"+ err.getResponseErrorMessage());

            }).getAsJsonMap();

    Map<String, Object> responseData = response.getResponseData();
    if(response.getResponseCode() == 0){
        ToastBar.showErrorMessage("Please check your internet!", Data.MESSAGE_ERROR_TIMEOUT);

    }
    gui_Span_Label_Debug.setText(gui_Span_Label_Debug.getText() +"\nResponse Code:\n"+ response.getResponseCode());
    gui_Span_Label_Debug.setText(gui_Span_Label_Debug.getText() +"\nResponse Error Msg:\n"+ response.getResponseErrorMessage());

    if(responseData == null){
        return false;
    }

    if(((String)responseData.get("status")).equalsIgnoreCase("error")){
        ToastBar.showErrorMessage((String)responseData.get("msg"), Data.MESSAGE_ERROR_TIMEOUT);
        return false;
    }

    if(((String)responseData.get("status")).equalsIgnoreCase("success")){
        ToastBar.showMessage((String)responseData.get("msg"), FontImage.MATERIAL_CHECK_CIRCLE, Data.MESSAGE_SUCCESS_TIMEOUT);
        Handle.LoggedInUserData = (Map<String, Object>) responseData.get("data");
        Handle.Authority = (String)Handle.LoggedInUserData.get("jwt");
        return true;
    }
    return false;
}
//...

Data.API_SIGNIN_URL - строка, содержащая адрес, доступный через Интернет, например, http://94.543.23.4/

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Ну, я добавил подсказку для сборки android.xpermissions и установил значение android.permission.INTERNET\=true,android.permission.WRITE_EXTERNAL_STORAGE\=true,android.permission.READ_EXTERNAL_STORAGE\=true.

Это работает, но мне кажется излишним, так как в соответствии с коденамонами документы Интернет-разрешение вставлено по умолчанию. я добавил хранилище только для того, чтобы предотвратить возможную подобную ситуацию

0 голосов
/ 18 марта 2019

Я предполагаю, что вы пытаетесь подключиться через IP к определенной машине, и она не работает. Этот компьютер, вероятно, виден только внутри вашей внутренней сети, а другие устройства не подключены к внутренней сети или не выбирают маршрут через вышки сотовой связи.

...