【问题标题】:ERROR: "Your request timed out. Please retry the request." with Android And PHP Program错误:“您的请求超时。请重试请求。”使用 Android 和 PHP 程序
【发布时间】:2012-08-03 09:23:18
【问题描述】:

我有一个与托管服务提供商上的服务器通信的 Android 应用程序。 此应用程序发送一个 http 请求 php 脚本检索请求并在数据库中执行操作。 我更改了数据库并调整了程序,现在我在服务器上收到错误:“您的请求超时。请重试请求。”

当我在firefox或chrome等浏览器中执行http命令时,命令正确执行,但在执行代码时会出现错误。

这不是脚本或 http 请求,因此我根本看不到它可能来自哪里。你能帮助我吗?非常感谢。

那里有安卓代码:

public class ConnexionSQL extends AsyncTask<Object,Void, ArrayList<String[]> > {


private static ArrayList<String[]> lesMessagesEtDate;
private String mydataFromHMI;
private String myFichierPHPbase;
private ProgressDialog pd;
private String[] splitData;
private boolean isProblemConnexion;

public ConnexionSQL(Activity activity) {

    pd = new ProgressDialog(activity);
    lesMessagesEtDate = new ArrayList<String[]>();
    mydataFromHMI = "";
    myFichierPHPbase="";
    isProblemConnexion = false;
}


protected ArrayList<String[]> doInBackground(Object... parametres) {
    Object[] tabArg = parametres;
    ArrayList<String[]>  messagesDateEtLocalisation = new ArrayList<String[]>();
    pd.show();

     if (((String)tabArg[3]).equalsIgnoreCase("insert")){

         insertIntoBD((String)tabArg[0], (Context)tabArg[1], (String)tabArg[2]);

     }else if(((String)tabArg[3]).equalsIgnoreCase("connect")){

         messagesDateEtLocalisation = ConnexionBD((String)tabArg[0], (Context)tabArg[1], (String)tabArg[2]);
     }
    return messagesDateEtLocalisation;
}


protected void onPreExecute() {
    pd.setMessage("Chargement en cours");
    pd.show();
}


protected void onProgressUpdate(){
    pd.setMessage("Chargement en cours");
    pd.show();
}

protected void onPostExecute(ArrayList<String[]> array)
{
    pd.setMessage("Le chargement se termine");
    pd.dismiss();     

}

public void insertIntoBD(String dataFromHMI, Context context, String FichierPHPbase){


    mydataFromHMI = dataFromHMI;
    myFichierPHPbase = FichierPHPbase;



    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    try{
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, false);  
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
        ConnManagerParams.setMaxTotalConnections(params, 1000);
        ConnManagerParams.setTimeout(params, 30000);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
        HttpClient httpclient = new DefaultHttpClient(manager, params);

        HttpPost httppost = new HttpPost("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        httpclient.execute(httppost);


    }
    catch(Exception e){
        Log.i("taghttppost",""+e.toString());
        isProblemConnexion = true;
    }

}



public ArrayList<String[]> ConnexionBD(String dataFromHMI, Context context,String FichierPHPbase) {

    mydataFromHMI = dataFromHMI;
    myFichierPHPbase = FichierPHPbase;

    String result = null;
    InputStream is = null;
    JSONObject json_data=null;
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    try{
        //commandes httpClient

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, false);  
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
        ConnManagerParams.setMaxTotalConnections(params, 1000);
        ConnManagerParams.setTimeout(params, 30000);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);


        HttpClient httpclient = new DefaultHttpClient(manager, params);             

        GestionStrings gestionString = new GestionStrings();
        splitData = mydataFromHMI.split(";;;");
        mydataFromHMI = gestionString.blancTraitement(splitData[0]) 
                + ";;;" 
                + gestionString.blancTraitement(splitData[1]) 
                + ";;;";

        HttpPost httppost = new HttpPost("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    }
    catch(Exception e){
        Log.i("taghttppost",""+e.toString());
        isProblemConnexion = true;
    }


    //conversion de la réponse en chaine de caractère
    try
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));

        StringBuilder sb  = new StringBuilder();

        String line = null;

        while ((line = reader.readLine()) != null) 
        {
            sb.append(line + "\n");
        }

        is.close();

        result = sb.toString();
        if (result.startsWith("<html>"))
        {
            isProblemConnexion = true;
        }
    }
    catch(Exception e)
    {
        Log.i("tagconvertstr",""+e.toString());
        isProblemConnexion = true;
    }
    //recuperation des donnees json
    try{
        JSONArray jArray = new JSONArray(result);

        for(int i=0;i<jArray.length();i++)
        {

            json_data = jArray.getJSONObject(i);
            String[] messageEtDate = new String[2];
            messageEtDate[0] = json_data.getString("message");
            messageEtDate[1] = json_data.getString("date");
            lesMessagesEtDate.add(messageEtDate);


        }
        //setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, lesMessages));
    }
    catch(JSONException e){
        Log.i("tagjsonexp",""+e.toString());
        isProblemConnexion = true;
    } catch (ParseException e) {
        Log.i("tagjsonpars",""+e.toString());
        isProblemConnexion = true;
    }
    if (isProblemConnexion){

        lesMessagesEtDate = new ArrayList<String[]>();
        lesMessagesEtDate.add(new String[]{"connexion_error_1234"});
        isProblemConnexion = false;
    }
    return lesMessagesEtDate;
}

}

有php脚本代码:

$base = mysql_connect ('sql31.free-h.org:3306', '*****', '******'); 
mysql_select_db ('routeslibre', $base) ;  
$variable = $_GET['variable'];
$first_token  = strtok($variable, ";;;");
$second_token = strtok(";;;");
$req =mysql_query("SELECT message, date from routeslibre.routeslibre where departement='$first_token' AND      voie='$second_token' ORDER BY date");
$output=array();
while ($row=mysql_fetch_array($req)) {    
$output[]=$row;    
} 
//on encode en JSON 
print(json_encode($output));
mysql_free_result ($req);

当我在“is.close();”行停止调试器时值“db”等于“&lt;html&gt; Your request timed out. Please retry the request

如果你不介意,你能不能给我一个技巧,一个找到错误的方法?

我将这一行放在代码中: int test = response.getStatusLine().getStatusCode(); 并且测试值是 408 所以(如网站中所述)这意味着我的托管服务提供商有错误。但是为什么当我提出 http 请求时,从代码中检索:http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI 的值,当我将它作为 chrome 或 firefox 放入 Web 客户端时,我的 php 脚本工作起来很发现......我不明白...... ???

【问题讨论】:

    标签: php android hosting


    【解决方案1】:

    使用此代码,不能完美运行:有时它的工作有时不能。在执行操作上设置调试器时,会抛出异常,其值仅为“null”。你能帮帮我吗?

    这是找不到的代码:

    HttpGet httpGet = new HttpGet(url);
    HttpParams httpParameters = new BasicHttpParams();
    // Set the timeout in milliseconds until a connection is established.
    // The default value is zero, that means the timeout is not used. 
    int timeoutConnection = 3000;
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
    // Set the default socket timeout (SO_TIMEOUT) 
    // in milliseconds which is the timeout for waiting for data.
    int timeoutSocket = 5000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
    
    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
    HttpResponse response = httpClient.execute(httpGet);
    

    我找到了一个解决方案,我循环执行代码,直到我收到请求(从服务器检索的状态等于 200),或者,如果请求没有提供任何结果,则会启动错误。 这是我的解决方案:

            String httpRequest = new String("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
            HttpPost request = new HttpPost(httpRequest); 
            HttpParams httpParameters = new BasicHttpParams();
            HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);
    
            DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
    
            HttpResponse response = null;
            for(int i= 0; i < 30; i++){
                response = httpclient.execute(request);
                if (response.getStatusLine().getStatusCode() == 200){
                    break;
                }else if (i == 29){
    
                    //ERROR CODE
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多