这是我为编写连接请求而编写的代码示例。 在这个例子中,我将忘记它时向用户发送新密码。但我已经意识到,当请求被发送到服务器端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);
}
#
任何帮助?
答案 0 :(得分:0)
我对PHP不够熟悉所以我不确定这个问题(你可以在那里添加php相关的taga以获得一些帮助)。
如果响应未关闭且我们的读取仍在等待响应代码,则会发生这种情况。我没有看到您将响应代码设置为200的位置,因此PHP可能会在此处打开连接。
您可以在模拟器中打开网络监视器,查看发出的请求和响应。