2010-12-12 2 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); 

서버가 항상 대답으로 내 요청은 "이름"-parameter가 없기 때문에이 코드는, 전혀 매개 변수를 추가하지 않는 것 같다.

실제로 예상대로 작동하는 예를 보자 :

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

답변

2

한 번 같은 문제가 있었지만 같은 방식으로 해결했습니다 ... 왜 내가 작동하지 않는지에 대한 주제를 찾았습니다. 그것은 서버 측에서 아파치의 라이브러리 구현에 관한 것이었다.

불행히도 지금은 그 주제를 찾을 수 없지만 만약 내가 당신이라면 나는 그 코드를 "우아함"에 대해별로 걱정하지 않을 것입니다. 할 수 있다면, 전혀 실용적이지 않습니다.

+3

그래, 네가 맞아.하지만 이해가 안돼. HttpParams API가 분명히 전혀 작동하지 않는 이유는 무엇입니까? –

1

첫 번째 방법으로 작동 시키려고했지만, HttpParams 인터페이스는이를 위해 만들어지지 않았습니다. 잠시 동안 구글에서 데, 나는 그것을 설명 this SO answer을 발견

HttpParams 인터페이스는 쿼리 문자열 매개 변수를 지정하기위한이 없다, 그것은 HttpClient를 객체의 런타임 동작을 지정하기위한입니다.

문서 비록 이렇게 특정 아니다 :

HttpParams 인터페이스 컴포넌트의 실행 불가능한 동작을 정의하는 값들의 집합을 나타낸다.

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(); 
    } 
} 

항목 :

연결 및 요청 시간 제한을 설정하기 위해

, 내가 API 8에서 사용할 수 완벽하게 작동하고 AndroidHttpClient 클래스를 사용하여 모두 HttpParamsList<NameValuePair>의 혼합을 사용했습니다 :