2010-12-12 10 views
14

Tôi không thể tải các công cụ HttpParams từ Android-API.Không thể tải HttpParams làm việc với Postrequest

Tôi chỉ không thể gửi một số Tham số đơn giản với Postrequest của mình. Mọi thứ đều hoạt động tốt, ngoại trừ các tham số. Mã này để thiết lập các thông số cho postrequest:

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

Dường như mã này không được thêm bất kỳ thông số nào cả, như các máy chủ luôn luôn trả lời, rằng yêu cầu của tôi là mất tích "tên" -parameter.

Một ví dụ về những gì đang thực sự làm việc như mong đợi:

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

Nhưng tôi muốn sử dụng một phiên bản của ví dụ đầu tiên, vì nó là dễ dàng hơn để đọc và hiểu được.

Bất kỳ gợi ý nào thực sự được đánh giá cao!

+1

+1 - Cùng một vấn đề ở đây ... chuyển sang sử dụng ArrayList và mọi thứ đang hoạt động ngay bây giờ ... không hiểu tại sao cùng một logic với HttpParams không hoạt động! – Vladimir

Trả lời

2

Khi tôi đã có cùng một vấn đề, và tôi đã giải quyết nó giống như bạn đã làm ... Tôi nhớ tôi đã tìm thấy một số chủ đề về lý do tại sao nó không hoạt động. Đó là một cái gì đó về việc thực hiện thư viện của Apache ở phía máy chủ.

Thật không may tôi không thể tìm thấy chủ đề đó ngay bây giờ, nhưng nếu tôi là bạn tôi sẽ chỉ để nó hoạt động và sẽ không lo lắng nhiều về sự "thanh lịch" của mã, có thể không có nhiều bạn có thể làm, và nếu bạn có thể, nó không thực tế chút nào.

+3

Vâng, bạn có quyền với điều đó, nhưng tôi không hiểu. Tại sao có một API cho HttpParams nếu nó không rõ ràng là không làm việc ở tất cả? –

1

Cố gắng làm cho nó hoạt động theo cách đầu tiên, nhưng có vẻ như giao diện HttpParams không được xây dựng cho điều đó. Có Googled trong một thời gian, tôi thấy this SO answer giải thích nó:

Giao diện HttpParams không có để xác định tham số chuỗi truy vấn, nó chỉ định hành vi thời gian chạy của đối tượng HttpClient.

Các tài liệu không phải là quá cụ thể, mặc dù:

HttpParams giao diện đại diện cho một tập hợp các giá trị bất biến mà xác định một hành vi gian chạy của một thành phần.

Đối với thiết lập kết nối và yêu cầu timeouts, tôi đã sử dụng một hỗn hợp của cả hai HttpParamsList<NameValuePair>, đó là đầy đủ chức năng và sử dụng lớp AndroidHttpClient, có sẵn từ 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(); 
    } 
} 

Xem thêm :