ConnectionRequest需要时间来postResponse

时间:2017-01-15 08:21:01

标签: php codenameone

这是我为编写连接请求而编写的代码示例。 在这个例子中,我将忘记它时向用户发送新密码。但我已经意识到,当请求被发送到服务器端forget.php时,电子邮件会自动发送,但readResponse方法在显示Dialog之前需要花费太多时间,这不是一个低连接问题因为我已经测试了它非常高速度连接

一旦服务器端完成了他的工作,你能说出如何调用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);

这里是服务器端脚本" forget.php" fis如何看起来的示例:

<?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,"foganbidi@gmail.com","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);

    }

任何帮助?

1 个答案:

答案 0 :(得分:0)

我对PHP不够熟悉所以我不确定这个问题(你可以在那里添加php相关的taga以获得一些帮助)。

如果响应未关闭且我们的读取仍在等待响应代码,则会发生这种情况。我没有看到您将响应代码设置为200的位置,因此PHP可能会在此处打开连接。

您可以在模拟器中打开网络监视器,查看发出的请求和响应。