Android JSON數據的解析與封裝小Demo

4e48 9年前發布 | 78K 次閱讀 Android Android開發 移動開發

首先是效果圖:


簡單起見,解析部分并沒有采用解析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

 本文由用戶 4e48 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!