今天早早的下班了,写了一个简单的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
原文地址:http://blog.csdn.net/zhoumushui/article/details/41452531