`

ch027 Android Json

 
阅读更多

--------------------------------------------AndroidManifest.xml---------------------------------

<manifest xmlns: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-permission android: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>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>

--------------------------------------------activity_main.xml------------------------------------

<LinearLayout xmlns: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--------------------------------------

package com.kawa.ch32;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.app.AlertDialog;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import com.kawa.ch32.util.JsonUtil;

public class MainActivity extends Activity {

private Button btn_array;

private Button btn_object;

private Button btn_json;

private String URL_JSONARRAY = "http://192.168.1.105:8080/com.kawa.ch32.web/JSONArray";

private String URL_JSONOBJECT = "http://192.168.1.105:8080/com.kawa.ch32.web/JSONObject";

private String URL_JSON = "http://192.168.1.105:8080/com.kawa.ch32.web/JSON";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

setListeners();

}

private void findViews() {

btn_array = (Button) findViewById(R.id.btn1);

btn_object = (Button) findViewById(R.id.btn2);

btn_json = (Button) findViewById(R.id.btn3);

}

private void setListeners() {

btn_array.setOnClickListener(onClickListener);

btn_object.setOnClickListener(onClickListener);

btn_json.setOnClickListener(onClickListener);

}

private OnClickListener onClickListener = new OnClickListener() {

@Override

public void onClick(View view) {

switch (view.getId()) {

case R.id.btn1:

try {

showResult(JsonUtil.getJSONArray(URL_JSONARRAY));

catch (Exception e1) {

e1.printStackTrace();

}

break;

case R.id.btn2:

try {

showResult(JsonUtil.getJSONObject(URL_JSONOBJECT));

catch (Exception e) {

e.printStackTrace();

}

break;

case R.id.btn3:

try {

showResult(JsonUtil.getJSON(URL_JSON));

catch (Exception e) {

e.printStackTrace();

}

break;

}

}

};

private void showResult(List<Map<String, String>> jsonList) {

StringBuffer result = new StringBuffer();

try {

for (Map<String, String> map : jsonList) {

String id = map.get("id");

String name = map.get("name");

result.append(id).append("--").append(name);

}

new AlertDialog.Builder(this).setTitle("json")

.setMessage(result.toString()).setPositiveButton("ok"null).show();

catch (Exception e) {

e.printStackTrace();

}

}

}

--------------------------------------------JsonUtil.java------------------------------------------

package com.kawa.ch32.util;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.net.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.json.JSONArray;

import org.json.JSONObject;

import android.util.Log;

public class JsonUtil {

/**    

 * 获取"数组形式"的JSON数据,    

  * 数据形式:[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]    

 * @param path  网页路径    

  * @return  返回List    

 * @throws Exception    

 */

public static List<Map<String, String>> getJSONArray(String path)

throws Exception {

String json = null;

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

Map<String, String> map = null;

URL url = new URL(path);

// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 单位是毫秒,设置超时时间为5秒

conn.setConnectTimeout(5 * 1000);

// HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

conn.setRequestMethod("GET");

// 判断请求码是否是200码,否则失败

if (conn.getResponseCode() == 200) {

InputStream is = conn.getInputStream(); // 获取输入流

byte[] data = readStream(is); // 把输入流转换成字符数组

json = new String(data); // 把字符数组转换成字符串

// 数据形式:[{"id":1,"name":"小猪","age":22},{"id":2,"name":"小猫","age":23}]

// 数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成Array

JSONArray jsonArray = new JSONArray(json);

for (int i = 0; i < jsonArray.length(); i++) {

// 每条记录又由几个Object对象组成

JSONObject item = jsonArray.getJSONObject(i);

int id = item.getInt("id"); // 获取对象对应的值

String name = item.getString("name");

map = new HashMap<String, String>(); // 存放到MAP里面

map.put("id", id + "");

map.put("name", name);

list.add(map);

}

}

return list;

}

/**    

 * 获取"对象形式"的JSON数据,    

 * 数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}    

 * @param path  网页路径    

 * @return  返回List    

 * @throws Exception    

 */

public static List<Map<String, String>> getJSONObject(String path)

throws Exception {

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

Map<String, String> map = null;

URL url = new URL(path);

// 利用HttpURLConnection对象,我们可以从网络中获取网页数据

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒

// HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

conn.setRequestMethod("GET");

// 判断请求码是否是200码,否则失败

if (conn.getResponseCode() == 200) {

InputStream is = conn.getInputStream(); // 获取输入流

byte[] data = readStream(is); // 把输入流转换成字符数组

String json = new String(data); // 把字符数组转换成字符串

// 数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]}

// 返回的数据形式是一个Object类型,所以可以直接转换成一个Object

JSONObject jsonObject = new JSONObject(json);

int total = jsonObject.getInt("total");

Boolean success = jsonObject.getBoolean("success");

// 里面有一个数组数据,可以用getJSONArray获取数组

JSONArray jsonArray = jsonObject.getJSONArray("arrayData");

for (int i = 0; i < jsonArray.length(); i++) {

JSONObject item = jsonArray.getJSONObject(i); // 得到每个对象

int id = item.getInt("id"); // 获取对象对应的值

String name = item.getString("name");

map = new HashMap<String, String>(); // 存放到MAP里面

map.put("id", id + "");

map.put("name", name);

list.add(map);

}

}

return list;

}

/**    

 * 获取类型复杂的JSON数据    

 *数据形式:    

    {"name":"小猪",    

     "age":23,    

     "content":{"questionsTotal":2,    

                "questions": [ { "question": "what's your name?", "answer": "小猪"},

                {"question": "what's your age", "answer": "23"}]    

               }    

    }    

 * @param path  网页路径    

 * @return  返回List    

 * @throws Exception    

 */

public static List<Map<String, String>> getJSON(String path) throws Exception {

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

Map<String, String> map = null;

URL url = new URL(path);

// 利用HttpURLConnection对象,我们可以从网络中获取网页数据.

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒

// HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET

conn.setRequestMethod("GET");

if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败

InputStream is = conn.getInputStream(); // 获取输入流

byte[] data = readStream(is); // 把输入流转换成字符数组

String json = new String(data); // 把字符数组转换成字符串

/*

 * 数据形式:

 * {"name":"小猪",

 * "age":23,

 * "content":{"questionsTotal":2,

 * "questions": [ { "question": "what's your name?", "answer": "小猪"},

 * {"question": "what's your age", "answer":

 * "23"}]

 * }

 * }

 */

// 返回的数据形式是一个Object类型,所以可以直接转换成一个Object

JSONObject jsonObject = new JSONObject(json);

String name = jsonObject.getString("name");

int age = jsonObject.getInt("age");

Log.i("abc""name:" + name + " | age:" + age); // 测试数据

// 获取对象中的对象

JSONObject contentObject = jsonObject.getJSONObject("content");

// 获取对象中的一个值

String questionsTotal = contentObject.getString("questionsTotal");

// 获取对象中的数组

JSONArray contentArray = contentObject.getJSONArray("questions");

for (int i = 0; i < contentArray.length(); i++) {

JSONObject item = contentArray.getJSONObject(i); // 得到每个对象

String question = item.getString("question"); // 获取对象对应的值

String answer = item.getString("answer");

map = new HashMap<String, String>(); // 存放到MAP里面

map.put("question", question);

map.put("answer", answer);

list.add(map);

}

}

return list;

}

/**    

 * 把输入流转换成字符数组    

 * @param inputStream   输入流    

 * @return  字符数组    

 * @throws Exception    

 */

public static byte[] readStream(InputStream inputStream) throws Exception {

ByteArrayOutputStream bout = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

while ((len = inputStream.read(buffer)) != -1) {

bout.write(buffer, 0, len);

}

bout.close();

inputStream.close();

return bout.toByteArray();

}

}

--------------------------------------------结果----------------------------------------------------

War包放入tomcat

启动tomcat,访问网页地址

本机IP

客户端效果

点击getJSONArray按钮

点击getJSONObject按钮

点击getJSON按钮

<!--EndFragment-->
  • 大小: 44.2 KB
  • 大小: 18.9 KB
  • 大小: 29.2 KB
  • 大小: 53.5 KB
  • 大小: 56.1 KB
  • 大小: 92.6 KB
  • 大小: 96.7 KB
  • 大小: 95.3 KB
  • 大小: 106.4 KB
分享到:
评论

相关推荐

    android json与xml解析 例子 demo

    在Android开发中,数据交换和存储常常涉及到JSON和XML这两种数据格式。它们是网络通信中常用的轻量级数据表示方式,使得服务器与客户端之间能够高效地传输数据。本篇文章将详细探讨Android环境下如何进行JSON与XML的...

    Androidsdk范例大全(CH03-CH05)

    该资源包含CH03至CH05章节的源码,为开发者提供了丰富的学习素材,旨在帮助他们更好地理解和掌握Android SDK的各种功能和特性。 CH03章节通常会涵盖Android应用的基本架构和组件,例如Activity、Intent、Service、...

    Android SDK开发范例大全(第二版)CH05.rar

    《Android SDK开发范例大全(第二版)CH05》是针对Android应用开发的一份重要资源,由清华大学出版社出版。这个压缩包包含了第五章的源代码,为开发者提供了丰富的实践示例,帮助深入理解Android SDK的使用。在这个...

    ch12_android开发_

    "ch12_android开发_"可能是指一个章节或教程,专注于讲解如何在Android应用中管理和处理各种类型的用户输入数据。在这个主题下,我们可以探讨几个关键知识点: 1. **用户界面(UI)组件**:Android提供了一系列预定...

    android ophone开发完全讲义源码ch14

    《Android OPhone开发完全讲义源码Ch14》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第14章的源代码。在这一章节中,开发者将了解到如何利用Android SDK和OPhone特有的功能来构建高效、功能丰富的...

    android SDK范例开发大全 第3版 源代码 CH5

    《Android SDK范例开发大全 第3版 源代码 CH5》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的使用方法和技巧。这一章节(CH5)可能主要关注的是...

    android ophone开发完全讲义源码ch05

    《Android OPhone开发完全讲义源码Ch05》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第五章的源代码。这个压缩包是开发者和学习者宝贵的资源,帮助他们理解并实践Android OPhone应用的开发过程。...

    android SDK范例开发大全 第3版 源代码 CH8

    《Android SDK范例开发大全 第3版 源代码 CH8》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码对应的是书中的第八章...

    android SDK范例开发大全 第3版 源代码 CH3

    网络编程也是Android开发中的重要部分,本章可能会讲解如何使用HttpURLConnection或OkHttp进行网络请求,以及如何处理JSON或XML数据。同时,对于现代的Android应用,学习如何集成第三方库,如Retrofit或Volley,也是...

    android ophone开发完全讲义源码ch24

    《Android Ophone开发完全讲义源码Ch24》是一份深入探讨Android Ophone平台开发的教程资料,其中包含了第24章的源代码。在这一章节中,开发者将了解到如何在Android Ophone环境下进行应用的构建、调试以及优化。...

    android开发课件

    10. **Android互联网应用**(ch_11Android互联网应用.ppt):介绍如何在Android应用中实现网络功能,包括HTTP请求、WebSocket通信、JSON解析,以及处理网络权限。 通过这些课件,开发者将能够全面了解Android应用...

    ch15_android开发_

    API返回的JSON数据解析后,可以使用`PolylineOptions`在地图上绘制路线。 总的来说,Android开发中的Google Map和GPS功能是增强用户体验的重要手段。开发者需要掌握如何正确使用`LocationManager`和`GoogleMap`API...

    《Android/OPhone开发完全讲义》一书的所有源代码

    4. **网络通信**:ch22可能涉及到Android应用的网络编程,如HTTP请求,使用OkHttp或Retrofit库,或者处理JSON数据。这包括了如何获取和解析网络数据,实现网络服务调用。 5. **多媒体与传感器**:ch23可能涵盖了...

    android ophone开发完全讲义源码ch06

    在Android Ophone开发中,Chapter 6(ch06)通常涵盖了系统架构、应用程序组件、UI设计、数据存储以及网络通信等关键知识点。这个压缩包可能包含了一系列的代码示例、教程文档或项目实例,旨在帮助开发者深入理解...

    Android SDK开发范例大全source_CH04

    综上所述,"Android SDK开发范例大全source_CH04"包含的内容广泛,涉及了Android开发的诸多核心技术和最佳实践。通过学习并实践这些示例,开发者可以提升自己的Android开发技能,更好地理解和运用Android SDK。

    Android App开发入门范例程序

    1. **Ch01 - Android基础** - Android系统架构:了解Android系统的层次,包括Linux内核、硬件抽象层、运行时库、应用程序框架和应用程序。 - Android Studio:Android的官方集成开发环境(IDE),包括项目创建、...

    Android APP开发入门:使用Android Studio环境 配套范例程序13-16章

    同时,可能还会涉及到JSON解析,因为网络数据通常以JSON格式传输,你需要将这些数据转换为Android应用可以处理的对象。 第16章可能是关于服务和广播接收器的,这两个组件允许应用在后台运行任务和响应系统事件。...

    疯狂android讲义(第2版) 源码 ch11-14

    源码ch11-14涵盖了书中第11至14章的内容,这部分主要涉及Android应用开发中的高级主题和技术,包括自定义视图、数据存储、网络通信以及多线程处理。 在第11章,"自定义View与动画"中,读者将学习如何扩展Android的...

    android SDK范例开发大全 第3版 源代码 CH7

    《Android SDK范例开发大全 第3版 源代码 CH7》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码主要聚焦于第7章的...

    Android APP开发入门:使用Android Studio环境 配套范例程序7-12章

    Ch08可能涉及活动(Activity)和意图(Intent)的概念,这是Android应用中实现屏幕间导航的关键。活动是用户与应用交互的窗口,而意图则用于在活动之间传递数据和启动新的操作。此外,可能会讲解到生命周期管理和...

Global site tag (gtag.js) - Google Analytics