Android发送GET与POST请求的DEMO详解

4.0后网络访问必须单独起一个子线程访问,否则无法运行,这里有一个发送请求的工具类GetPostUtil


代码如下:

public class GetPostUtil
{
 /**
  * 向指定URL发送GET方法的请求
  *
  * @param url
  *            发送请求的URL
  * @param params
  *            请求参数,请求参数应该是name1=value1&name2=value2的形式。
  * @return URL所代表远程资源的响应
  */
 public static String sendGet(String url, String params)
 {
  String result = "";
  BufferedReader in = null;
  try
  {
   String urlName = url + "?" + params;
   URL realUrl = new URL(urlName);
   // 打开和URL之间的连接
   URLConnection conn = realUrl.openConnection();
   // 设置通用的请求属性
   conn.setRequestProperty("accept", "*/*");
   conn.setRequestProperty("connection", "Keep-Alive");
   conn.setRequestProperty("user-agent",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
   // 建立实际的连接
   conn.connect();
   // 获取所有响应头字段
   Map<String, List<String>> map = conn.getHeaderFields();
   // 遍历所有的响应头字段
   for (String key : map.keySet())
   {
    System.out.println(key + "--->" + map.get(key));
   }
   // 定义BufferedReader输入流来读取URL的响应
   in = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = in.readLine()) != null)
   {
    result += "\n" + line;
   }
  }
  catch (Exception e)
  {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally块来关闭输入流
  finally
  {
   try
   {
    if (in != null)
    {
     in.close();
    }
   }
   catch (IOException ex)
   {
    ex.printStackTrace();
   }
  }
  return result;
 }
 /**
  * 向指定URL发送POST方法的请求
  *
  * @param url
  *            发送请求的URL
  * @param params
  *            请求参数,请求参数应该是name1=value1&name2=value2的形式。
  * @return URL所代表远程资源的响应
  */
 public static String sendPost(String url, String params)
 {
  PrintWriter out = null;
  BufferedReader in = null;
  String result = "";
  try
  {
   URL realUrl = new URL(url);
   // 打开和URL之间的连接
   URLConnection conn = realUrl.openConnection();
   // 设置通用的请求属性
   conn.setRequestProperty("accept", "*/*");
   conn.setRequestProperty("connection", "Keep-Alive");
   conn.setRequestProperty("user-agent",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
   // 发送POST请求必须设置如下两行
   conn.setDoOutput(true);
   conn.setDoInput(true);
   // 获取URLConnection对象对应的输出流
   out = new PrintWriter(conn.getOutputStream());
   // 发送请求参数
   out.print(params);
   // flush输出流的缓冲
   out.flush();
   // 定义BufferedReader输入流来读取URL的响应
   in = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = in.readLine()) != null)
   {
    result += "\n" + line;
   }
  }
  catch (Exception e)
  {
   System.out.println("发送POST请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally块来关闭输出流、输入流
  finally
  {
   try
   {
    if (out != null)
    {
     out.close();
    }
    if (in != null)
    {
     in.close();
    }
   }
   catch (IOException ex)
   {
    ex.printStackTrace();
   }
  }
  return result;
 }
}

Activity类代码


代码如下:

public class GetPostMain extends Activity
{
 Button get , post;
 EditText show;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  get = (Button) findViewById(R.id.get);
  post = (Button) findViewById(R.id.post);
  show = (EditText)findViewById(R.id.show);
  //利用Handler更新UI
  final Handler h = new Handler(){
   @Override
   public void handleMessage(Message msg) {
    if(msg.what==0x123){
     show.setText(msg.obj.toString());
    }
   }
  };

get.setOnClickListener(new OnClickListener()
  {
   @Override
   public void onClick(View v)
   {
    new Thread(new AccessNetwork("GET", "http://192.168.1.88:8080/abc/a.jsp", null, h)).start();
   }   
  });
  post.setOnClickListener(new OnClickListener()
  {
   @Override
   public void onClick(View v)
   {
    new Thread(new AccessNetwork("POST", "http://192.168.1.88:8080/abc/login.jsp", "name=crazyit.org&pass=leegang", h)).start();
   }   
  }); 
 }
}
class AccessNetwork implements Runnable{
 private String op ;
 private String url;
 private String params;
 private Handler h;

public AccessNetwork(String op, String url, String params,Handler h) {
  super();
  this.op = op;
  this.url = url;
  this.params = params;
  this.h = h;
 }
 @Override
 public void run() {
  Message m = new Message();
  m.what = 0x123;
  if(op.equals("GET")){
   Log.i("iiiiiii","发送GET请求");
   m.obj = GetPostUtil.sendGet(url, params);
   Log.i("iiiiiii",">>>>>>>>>>>>"+m.obj);
  }
  if(op.equals("POST")){
   Log.i("iiiiiii","发送POST请求");
   m.obj = GetPostUtil.sendPost(url, params);
   Log.i("gggggggg",">>>>>>>>>>>>"+m.obj);
  }
  h.sendMessage(m);
 }
}

(0)

相关推荐

  • Android HttpClient GET或者POST请求基本使用方法

    在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些) 这里只介绍如何使用HttpClient发起GET或者POST请求 GET 方式 复制代码 代码如下: //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair>

  • android平台HttpGet、HttpPost请求实例

    使用HttpClient中的HttpGet()方法进行http通信的实例: 复制代码 代码如下: /**   *description:Android HttpGet()   *authour:YanEr·Gates   *website:http://www.jb51.net */ package me.gogogoog; import java.io.IOException; import org.apache.http.HttpResponse;import org.apache.http

  • Android下通过httpClient发送GET和POST请求的实例代码

    复制代码 代码如下: public class HttpUtil { public static String sendDataByHttpClientGet(String path,String name,String pass){        String result = "";        //1.获取到一个浏览器        HttpClient client = new DefaultHttpClient();        //2.准备请求的地址        tr

  • android之HttpPost&HttpGet使用方法介绍

    直接讲用法,先知道怎么用,再知道怎么回事 1.HttpPost 复制代码 代码如下: try{ //创建连接 HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(url); //设置参数,仿html表单提交 List<NameValuePair> paramList = new ArrayList<NameValuePair>(); BasicNameValuePair para

  • android使用url connection示例(get和post数据获取返回数据)

    一定要加上对Sd卡读写文件的权限声明,以及访问网络的权限 复制代码 代码如下: <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="androi

  • Android中post和get的提交方式【三种】

    向服务器提交数据有两种方式,post和get.两者的区别主要有三点,安全性.长度限制.数据结构.其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体.两种都是较为重要的数据提交方式.现简单介绍一下三种post和get的提交方式.无论是哪种方法实现post和get,get 的访问路径都要携带数据,而post提交是把数据放在方法体中. 普通方法实现get/post提交:    严格遵照Http协议进行数据传输.在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线

  • Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

    Android6.0中把Apache HTTP Client所有的包与类都标记为deprecated不再建议使用所有跟HTTP相关的数据请求与提交操作都通过HttpURLConnection类实现,现实是很多Android开发者一直都Apache HTTP Client来做andoird客户端与后台HTTP接口数据交互,小编刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个坑,总结下最常用的就通过HttpURLConnection来POST提交JSON数据与

  • Android中使用OkHttp包处理HTTP的get和post请求的方法

    概览 http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的APP 变的更快和减少流量的使用 OkHttp 是一个很棒HTTP客户端(GitHub主页:https://github.com/square/okhttp): 支持SPDY, 可以合并多个到同一个主机的请求 使用连接池技术减少请求的延迟(如果SPDY是可用的话) 使用GZIP压缩减少传输的数据量 缓存响应避免重复的网络请求 当你的网络出现拥挤的时候,就是OKHttp 大显身手的时候, 它可以避免

  • Android发送GET与POST请求的DEMO详解

    4.0后网络访问必须单独起一个子线程访问,否则无法运行,这里有一个发送请求的工具类GetPostUtil 复制代码 代码如下: public class GetPostUtil{ /**  * 向指定URL发送GET方法的请求  *   * @param url  *            发送请求的URL  * @param params  *            请求参数,请求参数应该是name1=value1&name2=value2的形式.  * @return URL所代表远程资源的

  • Android屏幕锁屏弹窗的正确姿势DEMO详解

    在上篇文章给大家介绍了Android程序开发仿新版QQ锁屏下弹窗功能.今天通过本文给大家分享android锁屏弹窗的正确姿势. 最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也

  • Android异步下载图片并且缓存图片到本地DEMO详解

    在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数据,并且把图片缓存到本地一个cache目录里面,并且用一个自定义的Adapter去填充到LIstView,demo运行效果见下图: 通过这个demo,要学会有一下几点 1.怎么解析一个XML 2.demo中用到的缓存图片到本地一个临时目录的思想是怎样的? 3.AsyncTask类的使用,因为要去异

  • Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解

    一.淘宝商品详情页效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView的竖直排列,以及滑动事件的处理.如下图 三.具体实现 1.继承viewGroup自定义布局View 重写onMeasure()和onLayout方法,在onLayout方法中完成对两个子ScrollView的竖直排列布局,代码如下: 布局文件: <RelativeLayout xmlns:android="http:/

  • Android Xutils3网络请求的封装详解及实例代码

     Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org.xutils:xutils:3.3.40' 2.自定义Application /** * Created by Joe on 2016/9/25. */ public class MyApp extends Application { @Override public void onCreate(

  • RestTemplate发送HTTP POST请求使用方法详解

    目录 一.postForObject发送JSON格式请求 二.postForObject模拟表单数据提交 三.url支持占位符语法 四.postForEntity()方法 五.postForLocation()方法的使用 本文是精讲RestTemplate第4篇,前篇的blog访问地址如下: RestTemplate在Spring或非Spring环境下使用精讲 RestTemplate实现多种底层HTTP客户端类库的切换用法 RestTemplate发送HTTP GET请求使用方法详解 在上一节

  • RestTemplate发送HTTP GET请求使用方法详解

    目录 前言 一.getForObject()方法 1.1.以String的方式接受请求结果数据 1.2.以POJO对象的方式接受结果数据 1.3.以数组的方式接收请求结果 1.4.使用占位符号传参的几种方式 二.getForEntity()方法 前言 本文是精讲RestTemplate第3篇,前篇的blog访问地址如下: RestTemplate在Spring或非Spring环境下使用精讲 RestTemplate实现多种底层HTTP客户端类库的切换用法 RestTemplate可以发送HTTP

  • iOS中关于信鸽推送的使用demo详解

    最近在看推送方面的知识,用的是信鸽推送主要是因为后台用的是信鸽 推送用第三方推送,也就是在客户端建一个广播接收器,当服务器发送消息时发送到信鸽,信鸽再发送一次,广播接受器接受下: 我实现的功能比较简单,当app在运行状态时,会在主页展示一个弹窗展示推送的消息:如果app不在运行状态且service没被销毁就展示默认的通知 那么如何在主页展示弹窗:当广播接受器收到我要的消息时,用观察者模式,收到消息在发送个消息个主界面 官方的Demo连接:http://xg.qq.com/xg/help/ctr_

  • Android中实现ping功能的多种方法详解

    使用java来实现ping功能. 并写入文件.为了使用java来实现ping的功能,有人推荐使用java的 Runtime.exec()方法来直接调用系统的Ping命令,也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(native io, 高效IO包).但是设备检测只是想测试一个远程主机是否可用.所以,可以使用以下三种方式来实现: 1. Jdk1.5的InetAddresss方式 自从Java 1.5,java.net包中就实现了ICMP ping的功能. 使用时应注意,如

  • django rest framework之请求与响应(详解)

    前言:在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我们还知道RESTful API的另一个特性就是,发送不同的请求动作,会返还不同的响应,这篇文章就讲一下django-rest-framework这个工具在这方面给我们带来的便捷操作. 一.Request对象 平时我们在写Django的视图函数的时候,都会带上一个request参数,这样就能处理平时搭建网站时,浏览器访问网页时发出的常规的HttpReques

随机推荐