#java #codenameone
#java #codenameone
Вопрос:
Я установил приложение после сборки на разных устройствах (Android), приложение открывается нормально, но при отправке сетевого запроса только одно из устройств может успешно отправить, остальные не отвечают. Я использую Rest.post()
для отправки этого конкретного запроса. Использую codename one 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 /
Комментарии:
1. Желаю удачи в получении полезного ответа с той небольшой информацией, которую вы предоставили. Я предполагаю, что возможно, что кто-то был именно в том месте, где вы находитесь, и у него появится идея, не требующая продолжения. Чтобы получить лучший ответ, я бы предложил предоставить некоторую реальную информацию о вашем коде, о том, что делает ваше приложение и с какими серверными системами оно взаимодействует.
2. Как упоминал Стив, я предлагаю отредактировать вопрос, добавив некоторые подробности о сервере, адресах и о том, как работают соединения.
3. у меня есть кодовое имя одного встроенного приложения, в котором среди прочего есть экран входа в систему, который отправляет запрос с помощью Rest.post (). на ip-адрес с PHP-сервером. он отлично работает на эмуляторе, и после его сборки он отлично работает на одном устройстве, но после его установки на другие устройства приложение открывается, но нажатие кнопки входа в систему не дает никакого ответа
4. Этот адрес недоступен в Интернете. Попробуйте это на устройствах, которые не работают в приложении браузера.
5. Этот адрес был примером
Ответ №1:
Я предполагаю, что вы пытаетесь подключиться через IP к определенному компьютеру, и это не работает. Вероятно, этот компьютер виден только в вашей внутренней сети, а другие устройства не подключены к внутренней сети или выбирают маршрут через вышки сотовой связи.
Комментарии:
1. Это то, что я делаю, но машина видна в Интернете, а не в локальной сети. он отлично работает на одном устройстве, но не работает на других, на всех Android
2. Если это адрес компьютера в вашей сети, то это часть подсети. Попробуйте выполнить выборку
https://www.codenameone.com
на тех устройствах, которые «не работают», и убедитесь, что сеть работает…
Ответ №2:
ну, я добавил подсказку по сборке android.xpermissions
и установил значение android.permission.INTERNET=true,android.permission.WRITE_EXTERNAL_STORAGE=true,android.permission.READ_EXTERNAL_STORAGE=true
.
Это работает, но мне кажется избыточным, поскольку, согласно codenameone docs, разрешение на доступ в Интернет вставлено по умолчанию. я добавил хранилище только для того, чтобы предотвратить возможную подобную ситуацию
Комментарии:
1. Этот синтаксис неверен, и, как вы упомянули, это не будет иметь значения.
2. я вижу, проблема, скорее всего, в адресе сервера, возможно, из-за опечатки, я получаю неустойчивое поведение. я проверяю все адреса, чтобы убедиться, а также попробую вашу рекомендацию для получения coddename1 site спасибо