Mic*_*aël 9 java android http apache-httpclient-4.x
我正在为一个Android项目做一个Get和Post方法,我需要将HttpClient 3.x"翻译"到HttpClient 4.x(由android使用).我的问题是,我不确定我做了什么,我找不到某些方法的"翻译"......
这是我做过的HttpClient 3.x和( - >)HttpClient 4.x"翻译"如果我找到它(只有那些问我问题的人):
HttpState state = new HttpState (); --> ?
HttpMethod method = null; --> HttpUriRequest httpUri = null;
method.abort(); --> httpUri.abort(); //httpUri is a HttpUriRequest
method.releaseConnection(); --> conn.disconnect(); //conn is a HttpURLConnection
state.clearCookies(); --> cookieStore.clear(); //cookieStore is a BasicCookieStore
HttpClient client = new HttpClient(); --> DefaultHttpClient client = new DefaultHttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(SOCKET_TIMEOUT) --> HttpConnectionParams.setConnectionTimeout(param, SOCKET_TIMEOUT);
client.setState(state); --> ?
client.getParams().setCookiePolicy(CookiePolicy.RFC_2109); --> HttpClientParams.setCookiePolicy(param, CookiePolicy.RFC_2109);
PostMethod post = (PostMethod) method; --> ?
post.setRequestHeader(...,...); --> conn.setRequestProperty(...,...);
post.setFollowRedirects(false); --> conn.setFollowRedirects(false);
RequestEntity tmp = null; --> ?
tmp = new StringRequestEntity(...,...,...); --> ?
int statusCode = client.executeMethod(post); --> ?
String ret = method.getResponsBodyAsString(); --> ?
Header locationHeader = method.getResponseHeader(...); --> ?
ret = getPage(...,...); --> ?
我不知道这是否正确.这导致了问题,因为包的命名方式不同,也有一些方法.我只需要文档(我还没有找到)并且没什么帮助.
Cha*_*ins 23
以下是HttpClient 4文档,这是Android正在使用的(4,而不是3,从1.0-> 2.x).文档很难找到(感谢Apache;))因为HttpClient现在是HttpComponents的一部分(如果你只是寻找HttpClient,你通常会得到3.x的东西).
此外,如果您执行任意数量的请求,则不希望一遍又一遍地创建客户端.而是,作为HttpClient的教程注释,创建一次客户端并保持它.从那里使用ThreadSafeConnectionManager.
我使用了一个辅助类,例如HttpHelper(它仍然是一个移动的目标 - 我计划在某个时候将它移动到它自己的Android util项目,并支持二进制数据,还没有到达那里),以帮助这个.助手类创建客户端,并具有get/post/etc的便利包装方法.无论您何时从Activity中使用此类,都应创建内部内部AsyncTask(以便在发出请求时不阻止UI线程),例如:
    private class GetBookDataTask extends AsyncTask<String, Void, Void> {
      private ProgressDialog dialog = new ProgressDialog(BookScanResult.this);
      private String response;
      private HttpHelper httpHelper = new HttpHelper();
      // can use UI thread here
      protected void onPreExecute() {
         dialog.setMessage("Retrieving HTTP data..");
         dialog.show();
      }
      // automatically done on worker thread (separate from UI thread)
      protected Void doInBackground(String... urls) {
         response = httpHelper.performGet(urls[0]);
         // use the response here if need be, parse XML or JSON, etc
         return null;
      }
      // can use UI thread here
      protected void onPostExecute(Void unused) {
         dialog.dismiss();
         if (response != null) {
            // use the response back on the UI thread here
            outputTextView.setText(response);
         }
      }
   }
回答我问题的最简单方法是向您展示我所做的课程:
public class HTTPHelp{
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    private boolean abort;
    private String ret;
    HttpResponse response = null;
    HttpPost httpPost = null;
    public HTTPHelp(){
    }
    public void clearCookies() {
        httpClient.getCookieStore().clear();
    }
    public void abort() {
        try {
            if(httpClient!=null){
                System.out.println("Abort.");
                httpPost.abort();
                abort = true;
            }
        } catch (Exception e) {
            System.out.println("HTTPHelp : Abort Exception : "+e);
        }
    }
    public String postPage(String url, String data, boolean returnAddr) {
        ret = null;
        httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
        httpPost = new HttpPost(url);
        response = null;
        StringEntity tmp = null;        
        httpPost.setHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux " +
            "i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)");
        httpPost.setHeader("Accept", "text/html,application/xml," +
            "application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        try {
            tmp = new StringEntity(data,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            System.out.println("HTTPHelp : UnsupportedEncodingException : "+e);
        }
        httpPost.setEntity(tmp);
        try {
            response = httpClient.execute(httpPost,localContext);
        } catch (ClientProtocolException e) {
            System.out.println("HTTPHelp : ClientProtocolException : "+e);
        } catch (IOException e) {
            System.out.println("HTTPHelp : IOException : "+e);
        } 
                ret = response.getStatusLine().toString();
                return ret;
                }
}
| 归档时间: | 
 | 
| 查看次数: | 90850 次 | 
| 最近记录: |