使用HttpClient发送请求,接收响应很简单,只要5步:

  1. 创建HttpClient 对象

  2. 创建HttpGet对象;或者是HttpPost 对象

  3. 如果需要发送请求参数,可以调用HttpGet HttpPost共同的setParams(HttpParams params) 方法来添加请求参数;对于HttpPost对象,也可以调用setEntity(HttpEntity entity)方法来设置请求参数



客户端条件参数:List<NameValuePair>params=newArrayList<NameValuePair>();params.add(newBasicNameValuePair("LoginName",name));params.add(newBasicNameValuePair("LoginPassword",pass));//设置编码post.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8));
服务器端接收:StringloginName=request.getParameter("LoginName");StringloginPassword=request.getParameter("LoginPassword");

4.调用HttpClient对象的excute()发送请求,返回一个HttpResponse 对象。

5.调用HttpResponse的getAllHeaders(),getHeaders()等方法可以获取服务器的响应头;调用HttpResponse的getEntity()可以获取HttpEntity对象,该对象包转了服务器的响应内容。


登录的实例:核心代码

服务器端用的servlet搭建

packageLoginServlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassAndroidLoginServlerextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicAndroidLoginServler(){super();}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doPost(request,response);System.out.println("doGet");}//Url地址//http://localhost:8080/Android_Client/servlet/AndroidLoginServler?LoginName=yu&LoginPassword=123publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{System.out.println("doPost");request.setCharacterEncoding("UTF-8");StringloginName=request.getParameter("LoginName");StringloginPassword=request.getParameter("LoginPassword");System.out.println(loginName);System.out.println(loginPassword);//统一字符避免乱码response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriterout=null;try{/**登录业务判断*/out=response.getWriter();if(loginName.equals("yu")&&loginPassword.equals("123")){//登陆成功out.print("success");}else{//登陆失败out.print("failed");}}finally{if(out!=null)out.close();}}}

客户端

packagecom.example.xiaocool.httpclienttest;importandroid.app.AlertDialog;importandroid.content.DialogInterface;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Looper;importandroid.os.Message;importandroid.support.v7.app.ActionBarActivity;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.widget.Toast;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.HttpClient;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.protocol.HTTP;importorg.apache.http.util.EntityUtils;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;publicclassMainActivityextendsActionBarActivity{TextViewresponse;HttpClienthttpClient;Handlerhandler=newHandler(){publicvoidhandleMessage(Messagemsg){if(msg.what==0x123){response.append(msg.obj.toString()+"\n");}}};@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//创建DefaultHttpClient对象httpClient=newDefaultHttpClient();response=(TextView)findViewById(R.id.response);}publicvoidaccessSecret(Viewv){response.setText("");newThread(){@Overridepublicvoidrun(){//创建HttpGet对象HttpGetget=newHttpGet("http://112.237.241.204:8080/Android_Client/servlet/AndroidLoginServler?LoginName=yu&LoginPassword=123");try{//发送getHttpResponsehttpResponse=httpClient.execute(get);HttpEntityentity=httpResponse.getEntity();if(entity!=null){BufferedReaderbr=newBufferedReader(newInputStreamReader(entity.getContent()));Stringline=null;while((line=br.readLine())!=null){Messagemsg=newMessage();msg.what=0x123;msg.obj=line;handler.sendMessage(msg);}}}catch(Exceptione){e.printStackTrace();}}}.start();}publicvoidshowLogin(Viewv){//加载登陆界面finalViewloginDialog=getLayoutInflater().inflate(R.layout.login,null);//使用对话框供用户登陆系统newAlertDialog.Builder(MainActivity.this).setTitle("登录系统").setView(loginDialog).setPositiveButton("登陆",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){finalStringname=((EditText)loginDialog.findViewById(R.id.name)).getText().toString();finalStringpass=((EditText)loginDialog.findViewById(R.id.pass)).getText().toString();/*finalStringuri="http://112.237.241.204:8080/Android_Client/servlet/AndroidLoginServler?LoginName="+name+"&LoginPassword="+pass;*/finalStringuri="http://112.237.241.204:8080/Android_Client/servlet/AndroidLoginServler";newThread(){@Overridepublicvoidrun(){try{HttpPostpost=newHttpPost(uri);/***定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型,这个代码多处用于Java像url发送Post请求。在发送post请求时用该list来存放参数*/List<NameValuePair>params=newArrayList<NameValuePair>();params.add(newBasicNameValuePair("LoginName",name));params.add(newBasicNameValuePair("LoginPassword",pass));//设置编码post.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8));HttpResponseresponse=httpClient.execute(post);//如果服务器成功返回响应if(response.getStatusLine().getStatusCode()==200){Stringmsg=EntityUtils.toString(response.getEntity());Looper.prepare();//显示从服务器返回的信息Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();Looper.loop();}}catch(Exceptione){e.printStackTrace();}}}.start();}}).setNegativeButton("取消",null).show();}}




更多相关文章

  1. Android(安卓)网络请求框架Retrofit2.0使用笔记
  2. Android中的DatePickerDiaolog的使用
  3. Android(安卓)BitmapShader的简单使用和圆形图片的制作
  4. Android(安卓)7.0及以上版本 使用fillder抓取https请求
  5. Android/java 利用HttpUrlConnection 发送put请求,携带json参数
  6. Android中的享元模式
  7. android内从泄漏
  8. 捕获TextView超链接
  9. Android四种常用的消息传递机制/模式的比较

随机推荐

  1. 程序员最大的遗憾:在大学时忽略了数学
  2. 最强深度学习优化器Ranger开源:RAdam+Look
  3. “高级工程师”没用!你应该成为一名 “成
  4. 数据科学家年薪12万美元算高吗?我爬取近6
  5. 20201112 装饰器之函数即变量
  6. 0323作业-css基础知识3
  7. 使用grid实现一个12列栅格布局的组件,并g
  8. flex弹性盒模型常用项目属性及仿写移动端
  9. 【归纳】赶紧收藏css实现水平垂直居中的
  10. 全国软考报考一文搞定,软考报考网址及证书