Вот пример кода, который я пишу, чтобы сделать запрос на соединение.
В этом примере я отправляю новый пароль пользователю, когда он его забывает. Но я понял, что когда запрос отправляется на серверную часть Forgot.php, электронное письмо отправляется автоматически, но метод readResponse занимает слишком много времени перед отображением диалогового окна, это не проблема с низким соединением, потому что я проверил его с очень высоким уровнем скорость соединения
Можете ли вы сказать, что нужно сделать, чтобы метод readResponse был вызван после того, как сторона сервера выполнила свою работу?
ConnectionRequest requette=new ConnectionRequest(){
Map data;
@Override
protected void postResponse(){
String donnees=(String)data.get("reponse");
Dialog.show("", "An email has been sent to you on "+em+"\nPlease check it to found out your password", "OK",null);
}
@Override
protected void readResponse(InputStream input)throws IOException{
JSONParser parser=new JSONParser();
data=parser.parseJSON(new InputStreamReader(input));}};
requette.setUrl(new ServerUrl().getServerUrl()+"/forget.php");
requette.setPost(true);
requette.setTimeout(15000);
requette.addArgument("email", em);
requette.setDisposeOnCompletion(new LoadingDialog(new Form()));
NetworkManager.getInstance().addToQueueAndWait(requette);
Вот пример того, как серверный сценарий «Forgot.php» выглядит так:
<?php
include("connexion_base.php");
$email=mysql_escape_string($_POST["email"]);
$select=mysqli_query(connection(),"select * from users where email='$email'");if($r=mysqli_fetch_array($select)){
$pw=$r["pw"];
mail($email,"foganbidi","Your password is:\n$pw\n","From:foganbidi");
$sms.="Your password is:$pw";}else{
mail($email,"[email protected]","The email you submited does not exist in our database","From:foganbidi");
$sms.="The email you submited does not exist in our database";
}$data=array("reponse"=>$sms);
header("Content-Type:application/json");
echo json_encode($data);?>
вот как я проверяю код, который возвращается, но все еще работает очень медленно, но в браузере ссылка работает быстро
int rc=this.getResponseCode();
if(rc==200){
System.out.println("the code is "+rc);
JSONParser parser=new JSONParser();
InputStreamReader is=new InputStreamReader(input);
data=parser.parseJSON(is);
System.out.println("the data is "+data);}
и для этого простого запроса, который я сделал в другом проекте, требуется 20 секунд в симуляторе, прежде чем читать данные
#
private void connect() {
ConnectionRequest r=new ConnectionRequest(){
Map data;@Override
protected void handleException(Exception err){
System.out.println("error coming from exception "+err.getMessage());
}
@Override
protected void handleRuntimeException(RuntimeException err){
System.out.println("error coming from runtime "+err.getMessage());
}
@Override
protected void handleErrorResponseCode(int code, String message){
System.out.println("ther response code is "+code+" and the message is "+message);
}
@Override
protected void postResponse(){
System.out.println("ok for the data "+data);
}
@Override
protected void readResponse(InputStream input)throws IOException{
int rc=this.getResponseCode();
if(rc==200){JSONParser parser=new JSONParser();
InputStreamReader is=new InputStreamReader(input);
data=parser.parseJSON((Reader)is);}}
};
r.setUrl("http://localhost/craig/test2.php");
r.setTimeout(5000);
r.setPost(true);
r.addArgument("nom", "faugan");
InfiniteProgress progression=new InfiniteProgress();
Dialog dd=progression.showInifiniteBlocking();
r.setDisposeOnCompletion(dd);
NetworkManager.getInstance().addToQueue(r);
}
#
Любая помощь?
Я не достаточно знаком с PHP, поэтому я не совсем уверен в этом вопросе (вы можете добавить связанные теги php для некоторой помощи там).
Это произойдет, если ответ не был закрыт, и наше чтение все еще ожидает код ответа. Я не вижу, где вы устанавливаете код ответа на 200, поэтому PHP может держать соединение открытым здесь.
Вы можете открыть монитор сети в симуляторе и посмотреть, какие запросы выходят и ответы приходят.
Других решений пока нет …