网络请求
1、定义一个方法,并在方法中通过新建匿名类Thread,在Thread参数Runnable中重载run()方法,实际的网络请求就写在run()方法中。
protected void sendRequstWithHttpClient(){
new Thread(new Runable()(
public void run(){}))
.start();}
2、定义run()当中的网络方法:创建HttpClient和HttpGet实例,并通过HttpClient的execute()方法得到HttpResponse实例,并把HttpResponse实例转化为Entity实例(转化前一般先判断是否请求成功,即http状态码为200)。
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://XXX");
HttpResponse httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = httpResponse.getEntity();
疑问:
a、为啥要把HttpResponse转化为Entity,是不是Entity才能进行字符串的操作?
3、把entity实例转化为JSON形式的字符串,然后对字符串做解析。
String response = EntityUtils.toString(entity,"utf-8");
//EntityUtils为Entity的帮助类,感觉有点像String和StringBuilder。
parseJSONWithJSONObject(response);//自处定义的方法即为解析JSON
JSON解析
1、创建一个JSONArray对象(如果仅接受一条数据,也可以直接用JSONObject接收)
JSONArray jsonArray = new JSONArray(jsonData);
2、对JSONArray中的数据做遍历动作。
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
...
}
注意事项:
1、Tread(new Runable(){public void run()}).start();中的run()方法实际为一个try-catch语句:
try{
网络请求语句块;}
catch(Exception e){
e.printStackTrace;}
2、对JSON数组进行解析时也需要用try-catch语句块:
try{
解析遍历JSON语句;}
catch(Exception e){
e.printStackTrace;}