Can't get HttpParams working with Postrequest

后端 未结 2 1186
清歌不尽
清歌不尽 2021-01-04 05:12

I can\'t get the HttpParams-stuff from the Android-API working.

I just wan\'t to send some simple Parameters with my Postrequest. Everything is working fine, except

相关标签:
2条回答
  • 2021-01-04 05:27

    Tried to get it work the first way, but it seems HttpParams interface isn't intended to be built for that. Having Googled for a while, I found this SO answer explaining it:

    The HttpParams interface isn't there for specifying query string parameters, it's for specifying runtime behaviour of the HttpClient object.

    The documentation isn't so specific, though:

    HttpParams interface represents a collection of immutable values that define a runtime behavior of a component.

    For setting connection and request timeouts, I've used a mix of both HttpParams and List<NameValuePair>, which is fully functional and uses the AndroidHttpClient class, available from API 8:

    public HttpResponse securityCheck(String loginUrl, String name, String password) {
        AndroidHttpClient client = AndroidHttpClient.newInstance(null);
        HttpPost requestLogin = new HttpPost(
                loginUrl + "?");
    
        //Set my own params using NamaValuePairs
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("j_username", name));
        params.add(new BasicNameValuePair("j_password", password));
    
        //Set the timeouts using the wrapped HttpParams
        HttpParams httpParameters = client.getParams();
        int timeoutConnection = 3000;
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
        int timeoutSocket = 5000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
        try {
            requestLogin
                    .setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpResponse response = client.execute(requestLogin);
            return response;
        } catch (Exception e) {
            Log.e(TAG, e.getMessage(), e);
            return null;
        }finally {
            client.close();
        }
    }
    

    See also:

    • How to set HttpResponse timeout for Android in Java
    0 讨论(0)
  • 2021-01-04 05:51

    Once I had the same issue, and I solved it the same way as you did... I remember I found some topic about why that wasn't working. It was something about Apache's library implementation on the server side.

    Unfortunately I can't find that topic now, but if I were you I would just leave it working and wouldn't worry so much about the "elegance" of the code, cause probably there isn't much you can do, and if you can, it's not practical at all.

    0 讨论(0)
提交回复
热议问题