zoukankan      html  css  js  c++  java
  • Android中解析网络请求的URL

    近期正在做Android网络应用的开发,使用了android网络请求方面的知识。如今向大家介绍网络请求方面的知识。我们知道android中向server端发送一个请求,(这就是我们通常所说的POST请求),我们要发送一个完整的URL。然后server端接收到这个URL,对这个URL进行特定的解析。就是对URL进行解析,转化为JSON数据,然后,我们仅仅要处理这个JSON数据就能够了。


    我如今就用我的项目实例来体现解析URL的过程:

    1、组装URL的过程:

    private String getOrderPayUrl(int order, int action, String accountid,
    			String token) {
    		Calendar calendar = Calendar.getInstance();
    		long time = calendar.getTimeInMillis() / 1000;
    		return orderPayUrl + "?action=" + action + "&time=" + time
    				+ "&accountid=" + accountid + "&token=" + token + "&paymoney="
    				+ order + "¤cy=CNY&" + "sign="
    				+ getSign(action, time, accountid);
    	}
    

    2、发送URL的过程:

    private void httpRequest(String url, int which, String method) {
    		HttpRequestTask task = new HttpRequestTask(mHandler, url, which, method);
    		task.startTask();
    	}

    当中mHandler为一个定义的局部变量。用Handler类型来处理返回的解析结果,

    public class HttpRequestTask implements Runnable {
    
    	private Handler handler;
    	private String url;
    	private int which;
    	private String method;
    
    	public HttpRequestTask(Handler handler, String url, int which, String method) {
    		this.url = url;
    		this.handler = handler;
    		this.which = which;
    		this.method = method;
    
    	}
    
    	public void startTask() {
    		new Thread(this).start();
    	}
    
    	@Override
    	public void run() {
    		Looper.prepare();
    		sendRequest();
    	}
    
    	private void sendRequest() {
    		String result = null;
    		if (method != null && method.equals(MyConstant.POST)) {
    			result = HttpUtil.queryStringForPost(url);
    		}
    		if (method != null && method.equals(MyConstant.GET)) {
    			result = HttpUtil.queryStringForGet(url);
    		}
    		// Log.e("---result---", result);
    		Message msg = Message.obtain();
    		msg.what = which;
    		msg.obj = result;
    		handler.sendMessage(msg);
    	}
    
    }
    


    3、解析URL的过程:

    // 发送Post请求。获得响应查询结果
    	public static String queryStringForPost(String url) {
    
    		HttpPost request = HttpUtil.getHttpPost(url);
    		String result = null;
    
    		try {
    			// 获得响应对象
    			HttpResponse response = HttpUtil.getHttpResponse(request);
    
    			if (response.getStatusLine().getStatusCode() == 200) {
    				result = EntityUtils.toString(response.getEntity());
    				return result;
    			}
    
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    			result = "网络异常!";
    			return result;
    		} catch (IOException e) {
    			e.printStackTrace();
    			result = "网络异常!";
    			return result;
    		}
    		return result;
    	}

    // // 获得post请求对象request
    	public static HttpPost getHttpPost(String url) {
    		// 去除空格
    //		if (url != null) {
    //			Pattern p = Pattern.compile("\s");
    //			Matcher m = p.matcher(url);
    //			url = m.replaceAll("");
    //		}
    		HttpPost request = new HttpPost(url);
    		return request;
    	}

    当中我们要使用的包文件是  

    org.apache.http.client.methods.HttpPost

    实际上返回的result字符串是一个JSON类型的字符串,我们仅仅须要使用JSONObject来处理对应的JSON就能够了。得到我们须要数据,返回,OK。

    这实际上是一个比較清晰的流程,当中也能够看出多线程处理的模式。

    一旦我们须要网络请求的时候。我们通常会将网络请求的处理部分放在子线程中,另外开一个线程。这样就不会在原线程中处理过多的事情,这也减轻了主线程的压力。

  • 相关阅读:
    java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
    linux 下 nginx 启动服务器 80端口被占用问题
    ZooKeeper伪分布集群安装及使用 RMI+ZooKeeper实现远程调用框架
    nginx+tomcat+redis的集群+session共享
    java 实现mysql数据库导出
    SpringQtz 时间任务调度
    java.lang.OutOfMemoryError: Java heap space解决方法 (有问题咨询加微信)
    tomcat 大并发报错 Maximum number of threads (200) created for connector with address null and port 8080
    linux下安装svn
    Nginx 性能优化
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5203671.html
Copyright © 2011-2022 走看看