HttpClient 连接网络的两种方法doGet和doPost
2015-08-06 19:01
666 查看
大家都知道android连接网络有两种方式,一种是HttpClient,另一种是HttpURLConnection,下面就先把我自己学习的第一种连网方式HttpClient记录下来,后一种方法有空再记录下来,好记心始终不如烂笔头啊。
android连网分HttpClient和HttpURLConnection两种,而HttpClient又分doGet和doPost两种,HttpURLConnection也分doGet和doPost两种;
一,不管是什么方式连网,都要检查网络的可用性
在写这段代码前一定要先加权限:
doPost方法:
由于连接网络属于耗时操作,要实现HttpClient通信必须与AsyncTask异步机制结合,AsyncTask异步机制其实就是把线程和Handler消息机制封装的方法,当然这是系统封装好的的类;
doGet方法:
android连网分HttpClient和HttpURLConnection两种,而HttpClient又分doGet和doPost两种,HttpURLConnection也分doGet和doPost两种;
一,不管是什么方式连网,都要检查网络的可用性
ConnectivityManager cm = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if (info != null) { Toast.makeText(HttpClientAsyncTaskActivity.this, "连网正常" + info.getTypeName(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(HttpClientAsyncTaskActivity.this, "未连网", Toast.LENGTH_SHORT).show(); }
在写这段代码前一定要先加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
public class HttpClientActivity extends Activity implements OnClickListener { private TextView mTextView, mTextView1; private Button mButton, mButton1, mButton2,mButton3; private EditText mEditText; private ProgressDialog pq; private String addressurl = "http://192.168.1.196:8080/WebRoot/dogetServlet?name=admins&password=1234"; // private String addressurl = "http://www.baidu.com"; private String addressurl1 = "http://192.168.1.196:8080/WebRoot/dogetServlet"; /** * 一get方法 通过get方法获取服务器数据的两个方式HttpClient,HttpURLConnection * 传参直接在地址url中加上"?name=admins&password=1234" 传递的参数直接显示出来,不安全 */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.http_layout); mTextView = (TextView) findViewById(R.id.httpclient_text); mTextView1 = (TextView) findViewById(R.id.httpurl_text); mButton = (Button) findViewById(R.id.http_httpclient_get_but); mButton.setOnClickListener(this); mButton1 = (Button) findViewById(R.id.http_httclient_post_but); mButton1.setOnClickListener(this); mButton2 = (Button) findViewById(R.id.http_httpurl_get_but); mButton2.setOnClickListener(this); mButton3=(Button) findViewById(R.id.http_httpurl_post_but); mButton3.setOnClickListener(this); mEditText=(EditText) findViewById(R.id.httpurl_edit); }
doPost方法:
/** * @param HttpClient POST请求 */ public String getContentByHttpClientByPost(String httpurl) { try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(httpurl); /** POST组装参数 **/ BasicNameValuePair userNamePair = new BasicNameValuePair("name", "露西"); BasicNameValuePair passWordPair = new BasicNameValuePair( "password", "abcd"); ArrayList<BasicNameValuePair> Pairlist = new ArrayList<BasicNameValuePair>(); Pairlist.add(userNamePair); Pairlist.add(passWordPair); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(Pairlist, HTTP.UTF_8); httpPost.setEntity(entity); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); HttpResponse response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); Log.d("HttpClient POST", "statusCode>>>>>>>: " + statusCode); if (statusCode == HttpURLConnection.HTTP_OK) { String content = EntityUtils.toString(response.getEntity()); Log.d("HttpClient POST", "content>>>>>>>>: " + content); return content; } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }
由于连接网络属于耗时操作,要实现HttpClient通信必须与AsyncTask异步机制结合,AsyncTask异步机制其实就是把线程和Handler消息机制封装的方法,当然这是系统封装好的的类;
case R.id.http_httclient_post_but: new AsyncTask<String, Void, String>() {// 实现HttpClient通信与AsyncTask异步机制的结合 protected String doInBackground(String... params) { String url = params[0]; return getContentByHttpClientByPost(url); } protected void onPostExecute(String result) { if (result != null) { mTextView.setText(result); Log.v("HttpClient POST", "onPostExecute>>post:" + result); } } }.execute(addressurl1); break;
doGet方法:
/** * * HttpClient GET请求 * */ public String getContentByHttpClient(String httpurl) { InputStream in = null; try { HttpClient httpClient = new DefaultHttpClient();// 实例化HttpClient类 HttpGet httpGet = new HttpGet(httpurl);// 用get方法请求 HttpResponse response = httpClient.execute(httpGet);// 执行get请求方法返回 // response int statusCode = response.getStatusLine().getStatusCode();// 通过获取状态行再获取状态码 Log.v("", "statusCode>>>>>:" + statusCode); if (statusCode == HttpURLConnection.HTTP_OK) {// statusCode==200isok in = response.getEntity().getContent();// 获取信息内容 BufferedReader reader = new BufferedReader( new InputStreamReader(in, "UTF-8")); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } Log.v("", "sb.toString():" + sb.toString()); return sb.toString(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; }
同样,doGet方法也要与异步机制一起使用:
<pre class="java" name="code">case R.id.http_httpclient_get_but: /** 参数组装 **/ // String urls="http://192.168.1.196:8080/WebRoot/dogetServlet"; // String parameter="?name=admins&password=1234"; // String urlss=urls+parameter; // Log.v("","url>>>>:"+urlss); new AsyncTask<String, Void, String>() {// 实现HttpClient通信与AsyncTask异步机制的结合 protected String doInBackground(String... params) { String url = params[0]; return getContentByHttpClient(url); } protected void onPostExecute(String result) { if (result != null) { mTextView.setText(result); // pq.dismiss();// 消除dialog Log.v("", "onPostExecute:" + result); } } }.execute(addressurl); // pq = ProgressDialog.show(this, "请稍后。。。", "正在请求数据"); break;
权限配置:
<pre class="html" name="code"> <uses-permission android:name="android.permission.INTERNET" />
相关文章推荐
- 【linux高级程序设计】(第十五章)UDP网络编程应用 4
- 网络处理2-异步POST请求和同步请求
- 网络处理1-异步GET请求
- TCP/IP 笔记 7 Ping
- 预防黑客入侵 防黑必学的cmd命令vs网络安全
- tcp服务器组包
- 网络通信之Socket与LocalSocket的比较
- jgraphx中语言文件配置
- http://www.blogjava.net/zJun/archive/2006/06/28/55511.html
- IdTCP的C++Builder2010示例(转)
- Java网络爬虫
- hdu 4039 2011成都赛区网络赛I ***
- TCP为何采用三次握手来建立连接,若采用二次握手可以吗?
- volley Android or java https ssl exception
- TCP三次握手和四次挥手协议
- iOS -读书笔记-网络请求
- Android Http请求框架二:xUtils 框架网络请求
- Android Http请求框架一:Get 和 Post 请求
- ASIHttpRequest 使用
- Android面HTTP协议发送get要求