Android JSON数据的解析与封装小Demo

今天早早的下班了,写了一个简单的JSON Demo,这里总结一下。

首先是效果图:


简单起见,解析部分并没有采用解析URL的方式,直接把JSON写到String里,逻辑比较简单,这里就不啰嗦了,上代码:

package com.example.jsondemo;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {

	// private static final String BASE_URL =
	// "http://zhoumushui.sinaapp.com/json/";
	private TextView tvMsg;
	private TextView tvJson;
	private EditText etName;
	private EditText etAge;
	private String strJson = "";
	private String staffInfo = "";
	private String strJsonRes = "";
	private String strMsg;
	private Button btnAdd;
	private Button btnJson;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tvMsg = (TextView) findViewById(R.id.tvMsg);
		tvJson = (TextView) findViewById(R.id.tvJson);
		etName = (EditText) findViewById(R.id.etName);
		etAge = (EditText) findViewById(R.id.etAge);
		btnAdd = (Button) findViewById(R.id.btnAdd);
		btnJson = (Button) findViewById(R.id.btnJson);

		MsgToJson(); // 封装Json
		JsonToMsg(); // 解析Json
	}

	class onClickListenerImp implements OnClickListener {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if (v == btnAdd) {
				if (strMsg != null && strJson.trim().length() != 0) {
					strMsg = strMsg + ",{name:'" + etName.getText().toString()
							+ "',age:" + etAge.getText().toString() + "}";
				} else {
					strMsg = "{staff:[{name:'" + etName.getText().toString()
							+ "',age:" + etAge.getText().toString() + "}";
				}
				Toast.makeText(Main.this, "Add Succcess!", Toast.LENGTH_SHORT)
						.show();
				etAge.setText("");
				etName.setText("");
			} else if (v == btnJson) {
				strJsonRes = "";
				strJsonRes = strMsg + "]}";
				tvJson.setText(strJsonRes);
			}
		}
	}

	private void MsgToJson() {
		btnAdd.setOnClickListener(new onClickListenerImp());
		btnJson.setOnClickListener(new onClickListenerImp());

	}

	private void JsonToMsg() {
		strJson = "{staff:[{name:'Alex',age:21},{name:'Zhou',age:22},{name:'Anne',age:23}],company:'T-Chip'}";
		staffInfo = "原始数据:\n" + strJson + "\n\n解析之后:\n";
		try {
			JSONObject mJsonObject = new JSONObject(strJson);
			
			JSONArray mJsonArray = mJsonObject.getJSONArray("staff");
			String company = mJsonObject.getString("company");
			staffInfo = staffInfo + company + "共有 " + mJsonArray.length()
					+ " 个员工,信息如下:\n";

			for (int staffCount = 0; staffCount < mJsonArray.length(); staffCount++) {
				// 获取员工
				JSONObject staff = mJsonArray.getJSONObject(staffCount);
				int staffNo = staffCount + 1;
				staffInfo = staffInfo + "序号:" + staffNo + "  姓名: "
						+ staff.getString("name") + "  年龄: "
						+ staff.getInt("age") + "\n";
			}
			tvMsg.setText(staffInfo);
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


布局有点拖沓,其实数据封装部分还可以利用一下解析部分的逻辑。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvMsg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="==========================" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/etName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="姓名" />

        <EditText
            android:id="@+id/etAge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="年龄" />

        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="增加" />
          <Button
            android:id="@+id/btnJson"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="JSON" />
        
    </LinearLayout>

    <TextView
        android:id="@+id/tvJson"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。