2010-12-12 46 views
14

我無法從Android API獲取HttpParams-stuff的工作。無法使用Postrequest獲取HttpParams

我只是不想用我的Postrequest發送一些簡單的參數。一切工作正常,除了參數。該代碼的參數設置爲postrequest:

HttpParams params = new BasicHttpParams(); 
params.setParameter("password", "secret"); 
params.setParameter("name", "testuser"); 
postRequest.setParams(params); 

看來,這個代碼不加入任何參數可言,因爲服務器總是回答,我的要求沒有「名」 - 參數。

的什麼是真正按預期工作的一個例子:

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
postParameters.add(new BasicNameValuePair("name", "testuser")); 
postParameters.add(new BasicNameValuePair("password", "secret")); 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
postRequest.setEntity(formEntity); 

但我想用一個版本的第一個例子,因爲它更容易閱讀和理解。

任何提示真的很感激!

+1

+1 - 同樣的問題在這裏...切換到使用ArrayList 和一切正在工作...不明白爲什麼與HttpParams相同的邏輯不起作用! – Vladimir 2011-04-12 06:11:44

回答

2

一旦我遇到了同樣的問題,我就以同樣的方式解決了這個問題......我記得我發現了一些關於爲什麼不起作用的主題。這是關於服務器端Apache的庫實現的一些事情。

不幸的是,我現在找不到那個話題,但是如果我是你,我會讓它工作,不會太擔心代碼的「優雅」,因爲可能沒有太多你可以如果可以的話,這是不實際的。

+3

是的,你是對的,但我不明白。爲什麼有一個HttpParams的API,如果它顯然不工作? – 2010-12-13 18:05:48

1

試圖讓它工作的第一種方式,但似乎HttpParams接口不打算爲此而構建。已經用Google搜索了一會兒,我發現this SO answer解釋它:

的的HttpParams接口是不存在指定的查詢字符串參數,它是指定的HttpClient對象的運行時行爲。

該文檔是不那麼具體,但:

的HttpParams接口表示定義組件的運行時行爲不變的值的集合。

用於設置連接和請求超時,我用兩個HttpParamsList<NameValuePair>的混合,這是全功能的,並且使用AndroidHttpClient類,可從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(); 
    } 
} 

參見: