Android-封装post和get 网络请求

1.背景

   在开发android 的时候,网络请求时必不可少的,在此,封装成一个类,方便调用;

2.注意

   在这里实现了 HttpUrlConnection (不是HttpsUrlConnection)的get请求和 HttpClient 的 Get和 Post请求!
   这里封装的仅仅是数据的操作,不包括 图片的请求和上传!

3.HttpUrlConnection 实现

   
    这个请求成功后,需要使用 IO流来读取!  

public static String getData() throws Exception{
 
		try {
			//HttpPath.GetGamesPath() : 网络请求路径
			URL url=new URL(HttpPath.GetGamesPath());
			HttpURLConnection conn=(HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			
			if(conn.getResponseCode()==200){
			   InputStream ips=conn.getInputStream();
			   byte[] data=read(ips);
			   String str=new String(data);
			   System.out.println(str);
			   return str;
			}else{
			   return "网络错误 :conn.getResponseCode() ="+conn.getResponseCode();
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			return "HttpService.getGamesData()发生异常! "+e.getMessage();
		}
		
	}
	
	
	 /*
     * 读取流中的数据
     * */
	public static byte[] read(InputStream inStream) throws Exception {
		ByteArrayOutputStream outStream=new ByteArrayOutputStream();
		byte[] buffer=new byte[1024];
		int len=0;
		while((len=inStream.read(buffer))!=-1){
			outStream.write(buffer,0,len);
		}
		inStream.close();
		return outStream.toByteArray();
	}


4.Httpclient , Httppost , EneityUtils 实现 post 请求操作

   这里注意的是传参数的时候需要的是 List<BasicNameValuePair>  , 参数格式化 需要的是 UrlEncodeFormEntity 方法!

/**
	 * httpclient post提交数据
	 * @param parameters
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String toPostdata(List<BasicNameValuePair> parameters) throws ClientProtocolException, IOException{
		
		String str="获取失败";
		
		//初始化
		HttpClient  client=new DefaultHttpClient();
		//HttpPath.GetGamesPath() : 网络请求路径
		HttpPost httpPost=new HttpPost(HttpPath.GetGamesPath());
		//设置参数
		UrlEncodedFormEntity params=new UrlEncodedFormEntity(parameters,"UTF-8");
        httpPost.setEntity(params);	
        //执行请求
        HttpResponse response= client.execute(httpPost);
        //取得返回值
		if(response.getStatusLine().getStatusCode()==200){
			//请求成功
			HttpEntity entity=response.getEntity();
			str=EntityUtils.toString(entity, "UTF-8");
		}
		
		return str;
	}
	



5.Httpclient , Httpget , EneityUtils 实现 get请求操作



/**
	 * httpclient get 获得数据
	 * @return
	 */
	public static String toGetData(){
		String str="获取数据失败";
		
		HttpClient client=new DefaultHttpClient();
		HttpPath.GetGamesPath() : 网络请求路径
		HttpGet get=new HttpGet(HttpPath.GetGamesPath());
	 	try {
		 
	 		HttpResponse httpResponse=client.execute(get);
	 		
		    if(httpResponse.getStatusLine().getStatusCode()==200){
		    	str=EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
		    }
		 
		    return str;
		    
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			return "toGetData 异常:"+e.getMessage();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			return "toGetData 异常:"+e.getMessage();
		}
	}


6.对比

   相比之下 HttpClient 比 HttpUrlConnection 更方便些,但是 还是看习惯而言!

7.工具类下载






您好,Android 中可以使用 HttpURLConnection 类来进行 HTTP 请求的发送,以下是一个简单的封装示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtil { public static String sendHttpRequest(String urlStr, String method, String data) { HttpURLConnection connection = null; BufferedReader reader = null; try { URL url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(method); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.setDoInput(true); connection.setDoOutput(true); if (method.equals("POST")) { OutputStream outputStream = connection.getOutputStream(); outputStream.write(data.getBytes()); outputStream.flush(); outputStream.close(); } InputStream inputStream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } return response.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } return null; } } ``` 您可以使用 `sendHttpRequest` 方法来发送 HTTP 请求,需要传入请求的 URL、请求方法(GET 或 POST)以及请求数据(如果是 POST 请求)。方法会返回响应的数据。例如,发送一个 GET 请求: ```java String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "GET", null); ``` 发送一个 POST 请求: ```java String data = "param1=value1&param2=value2"; String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "POST", data); ``` 当然,上面的代码只是一个简单的封装示例,实际应用中需要进行更多的参数校验、错误处理等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值