Android网络数据Json格式解析

     上次我们讲到XML解析网络数据,这次我们来研究研究用Json格式解析数据


    照旧,我们先在web端的FQAcgtion.class模拟一组Json格式的数据:

 

public String getJson() throws Exception {
		// 获取数据
		// 调用数据库查询数据,返回对象集合(....)
		List<FQ> fqs = new ArrayList<FQ>();
		for (int i = 1; i <= 100; i++) {
			Calendar calendar = Calendar.getInstance();
			int year = calendar.get(Calendar.YEAR);
			int month = calendar.get(Calendar.MONTH);
			int day = calendar.get(Calendar.DAY_OF_MONTH);
			fqs.add(new FQ("原生态" + i, "很纯", year + "-" + month + "-" + day));
		}
		
		//将对象集合转换为json,例如:{"class":"150831","lists":30,"fqs""[{},{},{}]}
		JSONObject jo=new JSONObject();
		jo.put("clazz", "150831");
		jo.put("lists", fqs.size());
		
		JSONArray ja=new JSONArray();
		
		for (FQ fq : fqs) {
			JSONObject jos=new JSONObject();
			jos.put("name", fq.getName());
			jos.put("content", fq.getContent());
			jos.put("time", fq.getTime());
			ja.add(jos);
		}
		
		jo.put("fqs", ja);
		

		// 将对象集合存放到请求域中
//		ServletActionContext.getRequest().setAttribute("fqs", jo.toString());

		return "dataResultJson";
	}
	

      dataResultJson.jsp:

<%@ page language="java" contentType="text/plain; charset=utf-8" pageEncoding="utf-8"%>${fqs}

   struts.xml配置:

<action name="fqAction*" class="com.zking.action.FQAcgtion" method="{1}">
			<result name="dataResult">/dataResult.jsp</result>	
			<result name="dataResult">/dataResultJson.jsp</result>		    
		</action>



    截图如下:






        数据模拟好了,那我们现在来Android端拿取数据

       首先,先来个XML页面:依然是一个按钮和一个listview展示数据

      activity_get_json.xml

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取Json"
        android:onClick="getJson"
        />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_json_list"
        >
    </ListView>

     XML解析有三种方式,同样Json解析也有三种方式:


    1、原生态

     activity_get_json.activity

    

public class GetJsonActivity extends AppCompatActivity {

private ListView lv_json_list; private List<FQ> lists=new ArrayList<>(); private MyAdapter myAdapter; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_get_json); lv_json_list = (ListView) findViewById(R.id.lv_json_list); myAdapter = new MyAdapter(); lv_json_list.setAdapter(myAdapter); progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在拼命loading中..."); } class MyAdapter extends BaseAdapter { @Override public int getCount() { return lists.size(); } @Override public Object getItem(int i) { return lists.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view==null){ view= LayoutInflater.from(GetJsonActivity.this).inflate(R.layout.item_listview,null); ItemTag itemTag=new ItemTag(); itemTag.tv_content= (TextView) view.findViewById(R.id.tv_item_listview_content); itemTag.tv_name= (TextView) view.findViewById(R.id.tv_item_listview_name); itemTag.tv_time= (TextView) view.findViewById(R.id.tv_item_listview_time); view.setTag(itemTag); } ItemTag itemTag= (ItemTag) view.getTag(); itemTag.tv_name.setText(lists.get(i).getName()); itemTag.tv_content.setText(lists.get(i).getContent()); itemTag.tv_time.setText(lists.get(i).getTime()); return view; } } public void getJson(View view){ new MyTask().execute(); } class MyTask extends AsyncTask{ @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected Object doInBackground(Object[] objects) { String path=getString(R.string.server_name)+"fqActiongetJson.action"; try { URL url=new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream is=connection.getInputStream(); //读 BufferedReader br=new BufferedReader(new InputStreamReader(is)); StringBuffer stringBuffer=new StringBuffer(); String str=null; while((str=br.readLine())!=null){ stringBuffer.append(str); } // Log.i("test",stringBuffer.toString()); //解析JSOn //01.原生态 // try { // JSONObject jsonObject=new JSONObject(stringBuffer.toString()); // String clazz=jsonObject.getString("class"); // Log.i("test","class:"+clazz); // int num=jsonObject.getInt("lists"); // Log.i("test","lists:"+num); // // JSONArray jsonArray=jsonObject.getJSONArray("fqs"); // for (int i = 0; i <jsonArray.length() ; i++) { // JSONObject object=jsonArray.getJSONObject(i); // String name=object.getString("name"); // String content=object.getString("content"); // String time=object.getString("time"); // FQ fq=new FQ(name,content,time); // lists.add(fq); // } // } catch (JSONException e) { // e.printStackTrace(); // } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); myAdapter.notifyDataSetChanged(); progressDialog.cancel(); } } }


      2、GJon解析

public class GetJsonActivity extends AppCompatActivity {

    private ListView lv_json_list;
    private List<FQ> lists=new ArrayList<>();
    private MyAdapter myAdapter;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_json);

        lv_json_list = (ListView) findViewById(R.id.lv_json_list);
        myAdapter = new MyAdapter();
        lv_json_list.setAdapter(myAdapter);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("正在拼命loading中...");
    }
    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return lists.size();
        }

        @Override
        public Object getItem(int i) {
            return lists.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            if(view==null){
                view= LayoutInflater.from(GetJsonActivity.this).inflate(R.layout.item_listview,null);

                ItemTag itemTag=new ItemTag();

                itemTag.tv_content= (TextView) view.findViewById(R.id.tv_item_listview_content);
                itemTag.tv_name= (TextView) view.findViewById(R.id.tv_item_listview_name);
                itemTag.tv_time= (TextView) view.findViewById(R.id.tv_item_listview_time);

                view.setTag(itemTag);
            }

            ItemTag itemTag= (ItemTag) view.getTag();
            itemTag.tv_name.setText(lists.get(i).getName());
            itemTag.tv_content.setText(lists.get(i).getContent());
            itemTag.tv_time.setText(lists.get(i).getTime());

            return view;
        }
    }

    public void getJson(View view){
            new MyTask().execute();
    }

    class MyTask extends AsyncTask{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Object doInBackground(Object[] objects) {
            String path=getString(R.string.server_name)+"fqActiongetJson.action";
            try {
                URL url=new URL(path);
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);


                if(connection.getResponseCode()==200){
                    InputStream is=connection.getInputStream();
                    //读
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    StringBuffer stringBuffer=new StringBuffer();
                    String str=null;
                    while((str=br.readLine())!=null){
                        stringBuffer.append(str);
                    }
//                    Log.i("test",stringBuffer.toString());

                    //解析JSOn
                  

                    //02.使用Gson解析json
//                    Gson gson=new Gson();
//                    BigFQ bigFQ=gson.fromJson(stringBuffer.toString(),BigFQ.class);
//
//                    String clazz=bigFQ.getClazz();
//                    int num=bigFQ.getLists();
//
//                    Log.i("test","clazz "+clazz+" num:"+num);
//                    lists.addAll(bigFQ.getFqs());

                
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);

            myAdapter.notifyDataSetChanged();

            progressDialog.cancel();
        }
    }


}


     3、FastJson解析

public class GetJsonActivity extends AppCompatActivity {

    private ListView lv_json_list;
    private List<FQ> lists=new ArrayList<>();
    private MyAdapter myAdapter;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_json);

        lv_json_list = (ListView) findViewById(R.id.lv_json_list);
        myAdapter = new MyAdapter();
        lv_json_list.setAdapter(myAdapter);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("正在拼命loading中...");
    }
    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return lists.size();
        }

        @Override
        public Object getItem(int i) {
            return lists.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            if(view==null){
                view= LayoutInflater.from(GetJsonActivity.this).inflate(R.layout.item_listview,null);

                ItemTag itemTag=new ItemTag();

                itemTag.tv_content= (TextView) view.findViewById(R.id.tv_item_listview_content);
                itemTag.tv_name= (TextView) view.findViewById(R.id.tv_item_listview_name);
                itemTag.tv_time= (TextView) view.findViewById(R.id.tv_item_listview_time);

                view.setTag(itemTag);
            }

            ItemTag itemTag= (ItemTag) view.getTag();
            itemTag.tv_name.setText(lists.get(i).getName());
            itemTag.tv_content.setText(lists.get(i).getContent());
            itemTag.tv_time.setText(lists.get(i).getTime());

            return view;
        }
    }

    public void getJson(View view){
            new MyTask().execute();
    }

    class MyTask extends AsyncTask{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Object doInBackground(Object[] objects) {
            String path=getString(R.string.server_name)+"fqActiongetJson.action";
            try {
                URL url=new URL(path);
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);


                if(connection.getResponseCode()==200){
                    InputStream is=connection.getInputStream();
                    //读
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    StringBuffer stringBuffer=new StringBuffer();
                    String str=null;
                    while((str=br.readLine())!=null){
                        stringBuffer.append(str);
                    }
//                    Log.i("test",stringBuffer.toString());

                    //解析JSOn
                   
                    //03.使用FastJson
                    BigFQ bigFQ=JSON.parseObject(stringBuffer.toString(),BigFQ.class);
                    String clazz=bigFQ.getClazz();
                    int num=bigFQ.getLists();

                    Log.i("test","clazz "+clazz+" num:"+num);
                    lists.addAll(bigFQ.getFqs());

                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);

            myAdapter.notifyDataSetChanged();

            progressDialog.cancel();
        }
    }


}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值