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

4e48 9年前

首先是效果图:


简单起见,解析部分并没有采用解析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