简体   繁体   English

Httpclient已弃用

[英]Httpclient deprecated

I'm developing an app using HTTPclient for datatransfer. 我正在使用HTTPclient开发一个用于HTTPclient的应用程序。 Since HTTPClient is deprecated, I want to port the network part to URLConnection . 由于不推荐使用HTTPClient ,我想将网络部分移植到URLConnection

ConectionHttpClient.java ConectionHttpClient.java

package conexao;

import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;

public class ConexaoHttpClient {
    public static final int HTTP_TIMEOUT = 30 * 1000;
    private static HttpClient httpClient;
    private static HttpClient getHttpClient(){
        if (httpClient == null){
            httpClient = new DefaultHttpClient();
            final HttpParams httpParams = httpClient.getParams();
            HttpConnectionParams.setConnectionTimeout(httpParams, HTTP_TIMEOUT);
            HttpConnectionParams.setSoTimeout(httpParams, HTTP_TIMEOUT);
            ConnManagerParams.setTimeout(httpParams, HTTP_TIMEOUT);
        }return httpClient;

    }

public static String executaHttpPost(String url, ArrayList<NameValuePair> parametrosPost) throws Exception{
    BufferedReader bufferedReader = null;
    try{
        HttpClient client = getHttpClient();
        HttpPost httpPost = new HttpPost();
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parametrosPost);
        httpPost.setEntity(formEntity);
        HttpResponse httpResponse = client.execute(httpPost);
        bufferedReader = new BufferedReader(new InputStreamReader(httpPost.getEntity().getContent()));
        StringBuffer stringBuffer = new StringBuffer(" ");
        String line = " ";
        String LS = System.getProperty("line.separator");
        while ((line = bufferedReader.readLine()) != null){
            stringBuffer.append(line + LS); 
        }bufferedReader.close();


    String resultado = stringBuffer.toString();
    return resultado;
}finally{
    if (bufferedReader != null){
        try{
            bufferedReader.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

}
}

MainActivity.java MainActivity.java

package com.app.arts;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import conexao.ConexaoHttpClient;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public cla`enter code here`ss MainActivity extends Activity {

    EditText editEmail, editSenha;
    Button btnEntrar, btnEsqueciSenha, btnCadastrar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    editEmail = (EditText)findViewById(R.id.editEmail);
    editSenha = (EditText)findViewById(R.id.editSenha);
    btnEntrar = (Button)findViewById(R.id.btnEntrar);
    btnEsqueciSenha = (Button)findViewById(R.id.btnEsqueciSenha);
    btnCadastrar = (Button)findViewById(R.id.btnCadastrar);

    btnEntrar.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v){

        String urlPost="http://192.168.25.5/arts/admin/login.php";
        ArrayList<NameValuePair> parametrosPost = new ArrayList<NameValuePair>();
        parametrosPost.add(new BasicNameValuePair("email", editEmail.getText().toString()));
        parametrosPost.add(new BasicNameValuePair("senha", editSenha.getText().toString()));
        String respostaRetornada = null;
        try{
         respostaRetornada = ConexaoHttpClient.executaHttpPost(urlPost, parametrosPost);
         String resposta = respostaRetornada.toString();
         resposta = resposta.replaceAll("//s+", "");
         if (resposta.equals("1"))
           mensagemExibir("Login", "Usuario Valido");
         else
           mensagemExibir("Login", "Usuario Invalido");  
        }catch(Exception erro){
          Toast.makeText(MainActivity.this, "Erro: " +erro, Toast.LENGTH_LONG);
         }  
       }    
         public void mensagemExibir(String titulo, String texto){
      AlertDialog.Builder mensagem = new AlertDialog.Builder(MainActivity.this);
      mensagem.setTitle(titulo);
      mensagem.setMessage(texto);
      mensagem.setNeutralButton("OK", null);
      mensagem.show();


     }


    });
}
}

This is the solution that I have applied to the problem that httpclient deprecated in this version of android 22 这是我已经应用于httpclient在这个版本的android 22中弃用的问题的解决方案

Metod Get Metod得到

 public static String getContenxtWeb(String urlS) {
    String pagina = "", devuelve = "";
    URL url;
    try {
        url = new URL(urlS);
        HttpURLConnection conexion = (HttpURLConnection) url
                .openConnection();
        conexion.setRequestProperty("User-Agent",
                "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
        if (conexion.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(conexion.getInputStream()));
            String linea = reader.readLine();
            while (linea != null) {
                pagina += linea;
                linea = reader.readLine();
            }
            reader.close();

            devuelve = pagina;
        } else {
            conexion.disconnect();
            return null;
        }
        conexion.disconnect();
        return devuelve;
    } catch (Exception ex) {
        return devuelve;
    }
}

Metodo Post Metodo Post

 public static final String USER_AGENT = "Mozilla/5.0";



public static String sendPost(String _url,Map<String,String> parameter)  {
    StringBuilder params=new StringBuilder("");
    String result="";
    try {
    for(String s:parameter.keySet()){
        params.append("&"+s+"=");

            params.append(URLEncoder.encode(parameter.get(s),"UTF-8"));
    }


    String url =_url;
    URL obj = new URL(_url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "UTF-8");

    con.setDoOutput(true);
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
    outputStreamWriter.write(params.toString());
    outputStreamWriter.flush();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + params);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine + "\n");
    }
    in.close();

        result = response.toString();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }catch (Exception e) {
        e.printStackTrace();
    }finally {
    return  result;
    }

}

I use HttpURLConnection to do this kind of stuff in Android. 我使用HttpURLConnection在Android中执行此类操作。 I used the function below to read a content of a web page. 我使用下面的函数来阅读网页的内容。 I hope this can help you. 我希望这可以帮到你。

public String GetWebPage(String sAddress) throws IOException
{
    StringBuilder sb = new StringBuilder();

    BufferedInputStream bis = null;
    URL url = new URL(sAddress);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    int responseCode;

    con.setConnectTimeout( 10000 );
    con.setReadTimeout( 10000 );

    responseCode = con.getResponseCode();

    if ( responseCode == 200)
    {
      bis = new java.io.BufferedInputStream(con.getInputStream());
      BufferedReader reader = new BufferedReader(new InputStreamReader(bis, "UTF-8"));
      String line = null;

      while ((line = reader.readLine()) != null)
        sb.append(line);

      is.close();
    }

    return sb.toString();
}

Why you dont use Retrofit or OkHttp ? 为什么你不使用Retrofit或OkHttp? It is much simpler 它简单得多

 public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@Path("user") String user);
  } 


 RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();

 GitHubService service = restAdapter.create(GitHubService.class);  

 List<Repo> repos = service.listRepos("octocat");

More Information : http://square.github.io/retrofit/ 更多信息: http//square.github.io/retrofit/

HttpClient Deprecated since API level 22 HttpClient自API级别22以来已弃用

Use HttpURLConnection 使用HttpURLConnection

for more information related to HttpClient Deprecated refer this http://android-developers.blogspot.in/2011/09/androids-http-clients.html 有关HttpClient不推荐使用的更多信息,请参阅http://android-developers.blogspot.in/2011/09/androids-http-clients.html

Only google's own version of apache components is deprecated. 仅弃用google自己的apache组件版本。 You can still continue using it without any troubles like I described here: https://stackoverflow.com/a/37623038/1727132 你仍然可以继续使用它,没有像我在这里描述的任何麻烦: https//stackoverflow.com/a/37623038/1727132

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 HttpClient已弃用,而URIBuilder没有出现? - HttpClient deprecated, and URIBuilder not coming up? 不推荐使用httpclient,DefaultHttpClient,HttpPost,BasicNameValuePair,NameValuePair - httpclient, DefaultHttpClient, HttpPost ,BasicNameValuePair,NameValuePair are deprecated 弃用的 Java HttpClient - 有多难? - Deprecated Java HttpClient - How hard can it be? 如何用RequestConfig替换不推荐使用的httpClient.getParams()? - How do I replace Deprecated httpClient.getParams() with RequestConfig? HttpClient.getParams() 已弃用。 我应该用什么代替? - HttpClient.getParams() deprecated. What should I use instead? 不推荐使用 httpClient.getConnectionManager() - 应该使用什么代替? - httpClient.getConnectionManager() is deprecated - what should be used instead? 使用json从PHP获取数据到textview android,因为不推荐使用httpclient - Get data from PHP to textview android with json, since httpclient is deprecated 如何使用Apache HttpClient 4添加对不赞成使用的SSL密码套件的支持 - How to add support for deprecated SSL cipher suites with Apache HttpClient 4 HttpClient 4.3.x,修复不推荐使用的代码以使用当前的 HttpClient 实现 - HttpClient 4.3.x, fixing deprecated code to use current HttpClient implementations 在Android 7 org.apache.http(Apache HttpClient 4.0)中启用已弃用的密码套件后获取主机名不匹配 - Getting hostname mismatch after enabling deprecated cipher suite in Android 7 org.apache.http (Apache HttpClient 4.0)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM