ch027 Android(安卓)Json
--------------------------------------------AndroidManifest.xml---------------------------------
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.kawa.ch32"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15"/>
<!--网络权限-->
<uses-permissionandroid:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
--------------------------------------------activity_main.xml------------------------------------
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="getJSONArray"/>
<Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="getJSONObject"/>
<Button
android:id="@+id/btn3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="getJSON"/>
</LinearLayout>
--------------------------------------------MainActivity.java--------------------------------------
packagecom.kawa.ch32;
importjava.util.List;
importjava.util.Map;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importcom.kawa.ch32.util.JsonUtil;
publicclassMainActivityextendsActivity{
privateButtonbtn_array;
privateButtonbtn_object;
privateButtonbtn_json;
privateStringURL_JSONARRAY="http://192.168.1.105:8080/com.kawa.ch32.web/JSONArray";
privateStringURL_JSONOBJECT="http://192.168.1.105:8080/com.kawa.ch32.web/JSONObject";
privateStringURL_JSON="http://192.168.1.105:8080/com.kawa.ch32.web/JSON";
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
setListeners();
}
privatevoidfindViews(){
btn_array=(Button)findViewById(R.id.btn1);
btn_object=(Button)findViewById(R.id.btn2);
btn_json=(Button)findViewById(R.id.btn3);
}
privatevoidsetListeners(){
btn_array.setOnClickListener(onClickListener);
btn_object.setOnClickListener(onClickListener);
btn_json.setOnClickListener(onClickListener);
}
privateOnClickListeneronClickListener=newOnClickListener(){
@Override
publicvoidonClick(Viewview){
switch(view.getId()){
caseR.id.btn1:
try{
showResult(JsonUtil.getJSONArray(URL_JSONARRAY));
}catch(Exceptione1){
e1.printStackTrace();
}
break;
caseR.id.btn2:
try{
showResult(JsonUtil.getJSONObject(URL_JSONOBJECT));
}catch(Exceptione){
e.printStackTrace();
}
break;
caseR.id.btn3:
try{
showResult(JsonUtil.getJSON(URL_JSON));
}catch(Exceptione){
e.printStackTrace();
}
break;
}
}
};
privatevoidshowResult(List<Map<String,String>>jsonList){
StringBufferresult=newStringBuffer();
try{
for(Map<String,String>map:jsonList){
Stringid=map.get("id");
Stringname=map.get("name");
result.append(id).append("--").append(name);
}
newAlertDialog.Builder(this).setTitle("json")
.setMessage(result.toString()).setPositiveButton("ok",null).show();
}catch(Exceptione){
e.printStackTrace();
}
}
}
--------------------------------------------JsonUtil.java------------------------------------------
packagecom.kawa.ch32.util;
importjava.io.ByteArrayOutputStream;
importjava.io.InputStream;
importjava.net.*;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importorg.json.JSONArray;
importorg.json.JSONObject;
importandroid.util.Log;
publicclassJsonUtil{
/**
*获取"数组形式"的JSON数据,
*数据形式:[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]
*@parampath网页路径
*@return返回List
*@throwsException
*/
publicstaticList<Map<String,String>>getJSONArray(Stringpath)
throwsException{
Stringjson=null;
List<Map<String,String>>list=newArrayList<Map<String,String>>();
Map<String,String>map=null;
URLurl=newURL(path);
//利用HttpURLConnection对象,我们可以从网络中获取网页数据.
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
//单位是毫秒,设置超时时间为5秒
conn.setConnectTimeout(5*1000);
//HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
conn.setRequestMethod("GET");
//判断请求码是否是200码,否则失败
if(conn.getResponseCode()==200){
InputStreamis=conn.getInputStream();//获取输入流
byte[]data=readStream(is);//把输入流转换成字符数组
json=newString(data);//把字符数组转换成字符串
//数据形式:[{"id":1,"name":"小猪","age":22},{"id":2,"name":"小猫","age":23}]
//数据直接为一个数组形式,所以可以直接用android提供的框架JSONArray读取JSON数据,转换成Array
JSONArrayjsonArray=newJSONArray(json);
for(inti=0;i<jsonArray.length();i++){
//每条记录又由几个Object对象组成
JSONObjectitem=jsonArray.getJSONObject(i);
intid=item.getInt("id");//获取对象对应的值
Stringname=item.getString("name");
map=newHashMap<String,String>();//存放到MAP里面
map.put("id",id+"");
map.put("name",name);
list.add(map);
}
}
returnlist;
}
/**
*获取"对象形式"的JSON数据,
*数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}
*@parampath网页路径
*@return返回List
*@throwsException
*/
publicstaticList<Map<String,String>>getJSONObject(Stringpath)
throwsException{
List<Map<String,String>>list=newArrayList<Map<String,String>>();
Map<String,String>map=null;
URLurl=newURL(path);
//利用HttpURLConnection对象,我们可以从网络中获取网页数据
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
conn.setConnectTimeout(5*1000);//单位是毫秒,设置超时时间为5秒
//HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
conn.setRequestMethod("GET");
//判断请求码是否是200码,否则失败
if(conn.getResponseCode()==200){
InputStreamis=conn.getInputStream();//获取输入流
byte[]data=readStream(is);//把输入流转换成字符数组
Stringjson=newString(data);//把字符数组转换成字符串
//数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}
//返回的数据形式是一个Object类型,所以可以直接转换成一个Object
JSONObjectjsonObject=newJSONObject(json);
inttotal=jsonObject.getInt("total");
Booleansuccess=jsonObject.getBoolean("success");
//里面有一个数组数据,可以用getJSONArray获取数组
JSONArrayjsonArray=jsonObject.getJSONArray("arrayData");
for(inti=0;i<jsonArray.length();i++){
JSONObjectitem=jsonArray.getJSONObject(i);//得到每个对象
intid=item.getInt("id");//获取对象对应的值
Stringname=item.getString("name");
map=newHashMap<String,String>();//存放到MAP里面
map.put("id",id+"");
map.put("name",name);
list.add(map);
}
}
returnlist;
}
/**
*获取类型复杂的JSON数据
*数据形式:
{"name":"小猪",
"age":23,
"content":{"questionsTotal":2,
"questions":[{"question":"what'syourname?","answer":"小猪"},
{"question":"what'syourage","answer":"23"}]
}
}
*@parampath网页路径
*@return返回List
*@throwsException
*/
publicstaticList<Map<String,String>>getJSON(Stringpath)throwsException{
List<Map<String,String>>list=newArrayList<Map<String,String>>();
Map<String,String>map=null;
URLurl=newURL(path);
//利用HttpURLConnection对象,我们可以从网络中获取网页数据.
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
conn.setConnectTimeout(5*1000);//单位是毫秒,设置超时时间为5秒
//HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET
conn.setRequestMethod("GET");
if(conn.getResponseCode()==200){//判断请求码是否是200码,否则失败
InputStreamis=conn.getInputStream();//获取输入流
byte[]data=readStream(is);//把输入流转换成字符数组
Stringjson=newString(data);//把字符数组转换成字符串
/*
*数据形式:
*{"name":"小猪",
*"age":23,
*"content":{"questionsTotal":2,
*"questions":[{"question":"what'syourname?","answer":"小猪"},
*{"question":"what'syourage","answer":
*"23"}]
*}
*}
*/
//返回的数据形式是一个Object类型,所以可以直接转换成一个Object
JSONObjectjsonObject=newJSONObject(json);
Stringname=jsonObject.getString("name");
intage=jsonObject.getInt("age");
Log.i("abc","name:"+name+"|age:"+age);//测试数据
//获取对象中的对象
JSONObjectcontentObject=jsonObject.getJSONObject("content");
//获取对象中的一个值
StringquestionsTotal=contentObject.getString("questionsTotal");
//获取对象中的数组
JSONArraycontentArray=contentObject.getJSONArray("questions");
for(inti=0;i<contentArray.length();i++){
JSONObjectitem=contentArray.getJSONObject(i);//得到每个对象
Stringquestion=item.getString("question");//获取对象对应的值
Stringanswer=item.getString("answer");
map=newHashMap<String,String>();//存放到MAP里面
map.put("question",question);
map.put("answer",answer);
list.add(map);
}
}
returnlist;
}
/**
*把输入流转换成字符数组
*@paraminputStream输入流
*@return字符数组
*@throwsException
*/
publicstaticbyte[]readStream(InputStreaminputStream)throwsException{
ByteArrayOutputStreambout=newByteArrayOutputStream();
byte[]buffer=newbyte[1024];
intlen=0;
while((len=inputStream.read(buffer))!=-1){
bout.write(buffer,0,len);
}
bout.close();
inputStream.close();
returnbout.toByteArray();
}
}
--------------------------------------------结果----------------------------------------------------
War包放入tomcat
启动tomcat,访问网页地址
本机IP
客户端效果
点击getJSONArray按钮
点击getJSONObject按钮
点击getJSON按钮
<!--EndFragment-->
更多相关文章
- Android(安卓)StatusBar
- Android(安卓)获取设备唯一UUID
- android代码片段一
- Android(安卓)uses-permission权限
- android获取应用名称,判断应用是否安装
- Android之获取Android唯一ID
- android 将图片转换成黑白图片
- android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
- Android(安卓)获取当前日期 时间