HttpClient获取并解析JSON数据

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: package com.example.testjsonandget; import java.io.BufferedReader; import java.
package com.example.testjsonandget;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    private final String uriString="your url";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //服务器返回的JSON数据
        JSONObject jsonObject=this.getJSONObjectByGet();
        try {
        	//从JSON中得到字符串
			String apiString=jsonObject.getString("api");
			String countString=jsonObject.getString("count");
			System.out.println("apiString="+apiString+",countString="+countString);
			//从JSON中得到JSONArray,并且遍历
			JSONArray jsonArray=jsonObject.getJSONArray("data");
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject everyJsonObject=jsonArray.getJSONObject(i);
				String category_id=everyJsonObject.getString("category_id");
				String category_name=everyJsonObject.getString("category_name");
				String category_rgb=everyJsonObject.getString("category_rgb");
				String category_news_count=everyJsonObject.getString("category_news_count");
				System.out.println("category_id="+category_id+",category_name="+category_name+
				",category_rgb="+category_rgb+",category_news_count="+category_news_count);
			    System.out.println("=====================================================");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
    }

    //得到HttpClient
    public HttpClient getHttpClient(){
    	HttpParams mHttpParams=new BasicHttpParams();
    	//设置网络链接超时
    	//即:Set the timeout in milliseconds until a connection is established.
    	HttpConnectionParams.setConnectionTimeout(mHttpParams, 20*1000);
    	//设置socket响应超时
    	//即:in milliseconds which is the timeout for waiting for data.
    	HttpConnectionParams.setSoTimeout(mHttpParams, 20*1000);
    	//设置socket缓存大小
    	HttpConnectionParams.setSocketBufferSize(mHttpParams, 8*1024);
    	//设置是否可以重定向
    	HttpClientParams.setRedirecting(mHttpParams, true);
    	
    	HttpClient httpClient=new DefaultHttpClient(mHttpParams);
    	return httpClient;
    }
    
    //得到JSONObject(Get方式)
    public JSONObject getJSONObjectByGet(){
    	JSONObject resultJsonObject=null;
    	if ("".equals(uriString)||uriString==null) {
			return null;
		}
		HttpClient httpClient=this.getHttpClient();
		StringBuilder urlStringBuilder=new StringBuilder(uriString);
		StringBuilder entityStringBuilder=new StringBuilder();
		//利用URL生成一个HttpGet请求
		HttpGet httpGet=new HttpGet(urlStringBuilder.toString());
		BufferedReader bufferedReader=null;
		HttpResponse httpResponse=null;
		try {
			//HttpClient发出一个HttpGet请求
			httpResponse=httpClient.execute(httpGet);		
		} catch (Exception e) {
			e.printStackTrace();
		}
		//得到httpResponse的状态响应码
		int statusCode=httpResponse.getStatusLine().getStatusCode();
		if (statusCode==HttpStatus.SC_OK) {
			//得到httpResponse的实体数据
			HttpEntity httpEntity=httpResponse.getEntity();
			if (httpEntity!=null) {
				try {
					bufferedReader=new BufferedReader
					(new InputStreamReader(httpEntity.getContent(), "UTF-8"), 8*1024);
				    String line=null;
					while ((line=bufferedReader.readLine())!=null) {
						entityStringBuilder.append(line+"/n");
					}
					//利用从HttpEntity中得到的String生成JsonObject
					resultJsonObject=new JSONObject(entityStringBuilder.toString());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
    	return resultJsonObject;
    }
    
    //----------------------------------------以下为POST请求
    //准备进行POST请求的参数,一般而言将这些参数封装在HashMap中
    public JSONObject save(String title, String timelength) throws Exception{
    	Map<String,String> paramsHashMap = new HashMap<String, String>();
    	paramsHashMap.put("title", title);
    	paramsHashMap.put("timelength", timelength);
    	paramsHashMap.put("method", "save");
    	String path = "your url";
    	return getJSONObjectByPost(path, paramsHashMap, "UTF-8");
    }
    //得到JSONObject(Post方式)
    //此方法此处未调用测试
	public JSONObject getJSONObjectByPost(String path,Map<String, String> paramsHashMap, String encoding) {
		JSONObject resultJsonObject = null;
		List<NameValuePair> nameValuePairArrayList = new ArrayList<NameValuePair>();
		// 将传过来的参数填充到List<NameValuePair>中
		if (paramsHashMap != null && !paramsHashMap.isEmpty()) {
			for (Map.Entry<String, String> entry : paramsHashMap.entrySet()) {
				nameValuePairArrayList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
			}
		}
		
		UrlEncodedFormEntity entity = null;
		try {
			// 利用List<NameValuePair>生成Post请求的实体数据
			// 此处使用了UrlEncodedFormEntity!!!
			entity = new UrlEncodedFormEntity(nameValuePairArrayList, encoding);
			HttpPost httpPost = new HttpPost(path);
			// 为HttpPost设置实体数据
			httpPost.setEntity(entity);
			HttpClient httpClient = this.getHttpClient();
			// HttpClient发出Post请求
			HttpResponse httpResponse = httpClient.execute(httpPost);
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				// 得到httpResponse的实体数据
				HttpEntity httpEntity = httpResponse.getEntity();
				if (httpEntity != null) {
					try {
						BufferedReader bufferedReader = new BufferedReader(
						new InputStreamReader(httpEntity.getContent(),"UTF-8"), 8 * 1024);
						StringBuilder entityStringBuilder = new StringBuilder();
						String line = null;
						while ((line = bufferedReader.readLine()) != null) {
							entityStringBuilder.append(line + "/n");
						}
						// 利用从HttpEntity中得到的String生成JsonObject
						resultJsonObject = new JSONObject(entityStringBuilder.toString());
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultJsonObject;
	}
}

相关文章
|
18天前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
4天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
26 6
|
7天前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
28 9
|
10天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
19天前
|
XML JSON API
淘宝京东商品详情数据解析,API接口系列
淘宝商品详情数据包括多个方面,如商品标题、价格、图片、描述、属性、SKU(库存量单位)库存、视频等。这些数据对于买家了解商品详情以及卖家管理商品都至关重要。
|
13天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
39 0
|
20天前
|
监控 安全 网络安全
|
20天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
36 0
|
20天前
|
开发者 Java
JSF EL 表达式:乘技术潮流之风,筑简洁开发之梦,触动开发者心弦的强大语言
【8月更文挑战第31天】JavaServer Faces (JSF) 的表达式语言 (EL) 是一种强大的工具,允许开发者在 JSF 页面和后台 bean 间进行简洁高效的数据绑定。本文介绍了 JSF EL 的基本概念及使用技巧,包括访问 bean 属性和方法、数据绑定、内置对象使用、条件判断和循环等,并分享了最佳实践建议,帮助提升开发效率和代码质量。
26 0
|
20天前
|
开发者 监控 开发工具
如何将JSF应用送上云端?揭秘在Google Cloud Platform上部署JSF应用的神秘步骤
【8月更文挑战第31天】本文详细介绍如何在Google Cloud Platform (GCP) 上部署JavaServer Faces (JSF) 应用。首先,确保已准备好JSF应用并通过Maven构建WAR包。接着,使用Google Cloud SDK登录并配置GCP环境。然后,创建`app.yaml`文件以配置Google App Engine,并使用`gcloud app deploy`命令完成部署。最后,通过`gcloud app browse`访问应用,并利用GCP的监控和日志服务进行管理和故障排查。整个过程简单高效,帮助开发者轻松部署和管理JSF应用。
33 0

热门文章

最新文章

推荐镜像

更多