关于http

来源:互联网 发布:音乐唱歌软件 编辑:程序博客网 时间:2024/05/18 08:49

  刚接触一个项目,这块就难倒我了,不过这样才有动力,一步一步攻克!

首先是请求

定义一个Map集合

Map<String, Object> map = new HashMap<String, Object>();// 封装请求

往map里放入参数

map.put("type", 1);//start是服务器的参数

通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器获取数据。不过这个时候就有一个问题,这些数据是以什么格式在网络上传输的呢?一般我们都会在网络上传输一些格式化后的数据,这种数据会有一定的结构规格和语言,当另一方受到数据消息后就可以按照相同的结构规格进行解析,从而取出它想要的那部分内容。

在网络上传输数据最常用的格式:XML和Json

JsonObject 就是常说的 json。是一种重要的数据传输对象。其格式为{"key1":value1,"key2",value2....};key 必须是字符串。很像map对不对

一个key,一个value。

为了方便,首先定义一个工具类

public class ConfigUtil {}
然后定义方法  字符串转json格式

迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator模式是用于遍历

集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。

Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

public static String getJsonStrCommon(Map map) {JSONObject j = new JSONObject();  //使用JSONObject解析try {if (map != null) {Iterator iter = map.entrySet().iterator(); //迭代器while (iter.hasNext()) {   //<span style="font-family: Arial; font-size: 13px; line-height: 19.5px; background-color: rgb(254, 254, 242);">检查序列中是否还有元素</span>Map.Entry entry = (Map.Entry) iter.next(); //强转为<span style="font-family: Arial, Helvetica, sans-serif;">Map.Entry类,<span style="font-family: Arial; font-size: 13px; line-height: 19.5px; background-color: rgb(254, 254, 242);">获得序列中的下一个元素。</span></span>String key = (String) entry.getKey();Object val = entry.getValue();if (val instanceof String) {j.put(key, val);} else if (val instanceof Long) {long value = ((Long) val).longValue();j.put(key, value);} else if (val instanceof Double) {double value = ((Double) val).doubleValue();j.put(key, value);} else if (val instanceof Double) {int value = ((Integer) val).intValue();j.put(key, value);} else {j.put(key, val);}}}} catch (Exception e) {e.printStackTrace();}String data = j.toString();return data;}

NameValuePair(简单名称值对节点类型)这个代码多处用于Java向url发送Post请求。在发送post请求时用该list来存放参数。

List<NameValuePair> params = new ArrayList<NameValuePair>();   //请求参数的集合

定义一个各种参数初始化的类

protected void initBaseParams(List<NameValuePair> params, Map<String, Object> mapParams, String strAPI) {<span style="white-space:pre">params.add(new BasicNameValuePair("data", ConfigUtil.getJsonStrCommon(mapParams)));</span>
<span style="white-space:pre">params.add(new BasicNameValuePair("api", strAPI));</span>}

然后把三个参数放进去、

initBaseParams(params, map, Urls.api_SchoolService_bannerList);  // 组装请求参数
接下来就是开启线程

定义一个类,用于表示更新

public abstract class BaseHandlerUI {    public final static int api_SchoolService_bannerList = 1}
定义一个用来开启线程的类, 继承BaseHandlerUI,实现接口Runnable

因为Android不允许在子线程中进行UI操作,所以我们添加一个Handler对象,放进这个类里,方便调用

public class UIAsnTask extends BaseHandlerUI implements Runnable {
<span style="white-space:pre"></span>private Handler mHandler = new Handler();<span style="white-space:pre"></span>private int request_code;<span style="white-space:pre"></span>private String result;<span style="white-space:pre"></span>private Context context;
<span style="white-space:pre"></span>private List<NameValuePair> params = new ArrayList<NameValuePair>();<span style="white-space:pre"></span>private Map<String, String> map = new HashMap<String, String>();<span style="white-space:pre"></span>static JsonMapper mapper = JsonMapper.nonDefaultMapper();
<span style="white-space:pre"></span>private void initParams(Handler mHandler, int request_code) {<span style="white-space:pre"></span>this.mHandler = mHandler;<span style="white-space:pre"></span>this.request_code = request_code;<span style="white-space:pre"></span>}
<span style="white-space:pre">/**<span style="white-space:pre"></span> * post请求构造函数<span style="white-space:pre"></span> */<span style="white-space:pre"></span>public UIAsnTask(Handler mHandler, List<NameValuePair> params, int request_code) {<span style="white-space:pre"></span>super();<span style="white-space:pre"></span>initParams(mHandler, request_code);<span style="white-space:pre"></span>this.params = params;<span style="white-space:pre"></span>}</span>
<span style="white-space:pre">@Override<span style="white-space:pre"></span>public void run() {<span style="white-space:pre"></span>excute();<span style="white-space:pre"></span>}</span>
}
接着使用HttpClient访问服务器

定义一个类 HttpUtils

public class HttpUtils {}
接着定义doPost方法,用来存放地址,和待提交的参数






0 0
原创粉丝点击