Android与PHP交互:客户端用HTTP协议与服务端通信

        为了实现Android客户端和服务端的通信,Android SDK为我们提供了Apache的HttpClient来方便我们使用各种HTTP服务。可以把HttpClient看成一个浏览器,通过它可以方便地发出GET请求和POST请求来获得服务端响应。

下面我们先来实现一个GET请求:

//  		服务端负责处理请求页面的URL,这里你自己根据你的IP地址及文件目录进行填写
			String baseURL = "http://10.15.67.10:8080/phptest1/index.php";
//			?后面跟要传送的键值对,多个键值对之间用&连接。这里第一个键值对的键名为name,键值为输入的值;第二个键名为password,键值为输入值。
			String URL = baseURL+"?name="+editText1.getText().toString()+"&password="+editText2.getText().toString();
			try{
			HttpGet httpGet = new HttpGet(URL);
			
			HttpParams params = new BasicHttpParams();
//			采用UTF-8编码格式
	        params.setParameter("charset", HTTP.UTF_8);
//	                 设置连接超时时间为8秒
	        HttpConnectionParams.setConnectionTimeout(params, 8 * 1000);
//	                 设置数据请求时间为8秒
	        HttpConnectionParams.setSoTimeout(params, 8 * 1000);
//	                 新建一个Http客户端对象
	        HttpClient httpClient = new DefaultHttpClient(params);
//	                  用该对象发送GET请求,返回一个Http响应
	        HttpResponse httpResponse = httpClient.execute(httpGet);
//	                 判断是否获得正确的响应,然后执行相应的操作
		    if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
//					这里要注意一下返回的结果用UTF-8编码,否则当返回结果有中文时可能会出现乱码。最好所有的地方都统一编码
					String strResult = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
					if(strResult.equals("loginsuccess")){
//				    	登录成功 ToDO
						Log.d("debug", strResult);
					}
					else {
//					 	登录失败 ToDo
						Log.d("debug", strResult);
					}
		        }	
			}
			catch(Exception e){		
				Log.d("debug", "GETFAILED:"+e.toString());
			}


接下来是POST请求:

			String username = editText1.getText().toString();
			String userpassword = editText2.getText().toString();
//			新建名值对,用于存储要传送的数据
			NameValuePair nameValuePair1 = new BasicNameValuePair("name", username);
			NameValuePair nameValuePair2 = new BasicNameValuePair("password", userpassword);
//			将创建好的名值对加入到list中
			List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
			nameValuePairs.add(nameValuePair1);
			nameValuePairs.add(nameValuePair2);
			
			try{
	//		  	用刚才的list填充一个http请求实体,并采用UTF-8编码
				HttpEntity requesteEntity = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
	//			第一个POST请求
				HttpPost httpPost = new HttpPost(baseURL);
	//			设置POST请求的数据实体
				httpPost.setEntity(requesteEntity);
				
				HttpParams parms = new BasicHttpParams();
	//			设置超时时间和请求时间
		        HttpConnectionParams.setConnectionTimeout(parms, 8 * 1000);
		        HttpConnectionParams.setSoTimeout(parms, 8 * 1000);
	//	                 新建一个http客户端对象
		        HttpClient httpClient = new DefaultHttpClient(parms);
	//	                 发送POST请求,返回一个http响应
				HttpResponse httpResponse = httpClient.execute(httpPost);
				
				if(httpResponse.getStatusLine().getStatusCode() == 200){
//					返回响应的结果
					String strResult = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
					if(strResult.equals("loginsuccess")){
//				    	登录成功 ToDO
						Log.d("debug", strResult);
					}
					else {
//					 	登录失败 ToDo
						Log.d("debug", strResult);
					}
					
				}
				else{
					Log.d("debug", "Error Response:"+httpResponse.getStatusLine().toString());	
				}
			}
			catch(Exception e){
				Log.d("debug", e.toString());
			}

http://10.15.67.10:8080/phptest1/index.php

<?php
//判断全局变量GET和POST对应的键名是否被赋值
if(isset($_GET["name"])&&isset($_GET["password"])){
	$name = $_GET["name"];
	$password = $_GET["password"];
}
if(isset($_POST["name"])&&isset($_POST["password"])){
	$name = $_POST["name"];
	$password = $_POST["password"];
}
//如果客户端输入的用户名为admin,密码为111111则登录成功。在实际项目中当然是查询数据库进行判断啦。。
if($name == 'admin'&&$password == '111111'){
	echo "loginsuccess";
}
else{
	echo "loginfailed";
}

当然,不要忘了在Androidmanifest文件中加上访问网络的权限

<uses-permission android:name="android.permission.INTERNET"/>

还有一点要值得注意的是,Android不准在主线程中执行网络操作,所以在执行上述操作的时候要在一个子线程中完成,然后可以用handler异步更行UI。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值