Json解析小案例
2016-01-09 20:25
645 查看
本文Json解析荔枝新闻
MainActivity中的代码:
MyAdapter中的代码:
item_listview_activity.xml中的代码:
activity_main.xml中代码:
我们的数据源来自网络
所以一定不要忘了在清单文件中为其设置连接网络权限
清单文件中的代码:
MainActivity中的代码:
package org.moblie.train.zday09_json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.moblie.train.zday09_json_MyUtils.HttpURLConnHelper; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private String jsonUrl = "http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20&pageIndex="; private ListView listView; private MyAdapter adapter; private List<Map<String, String>> list = new ArrayList<Map<String, String>>(); private boolean isBottom; private int currentPage = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化ListView initViews(); // 完成网络请求,通过异步任务,在子线程完成 loadNetworkData(); } private void loadNetworkData() { new MyTask().execute(jsonUrl + currentPage); } private void initViews() { listView = (ListView) findViewById(R.id.listView_Main); adapter = new MyAdapter(list, this); listView.setAdapter(adapter); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (isBottom && scrollState == SCROLL_STATE_IDLE) { // 已经滑动到最底部。此时需要将页数加1,再重新请求 currentPage++; loadNetworkData(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { isBottom = ((firstVisibleItem + visibleItemCount) == totalItemCount); } }); } public List<Map<String, String>> jsonStringToList(String jsonString) { try { JSONObject jsonObject = new JSONObject(jsonString); if (jsonObject.getString("status").equals("ok")) { JSONObject jsonObject_paramz = jsonObject .getJSONObject("paramz"); JSONArray jsonArray_feeds = jsonObject_paramz .getJSONArray("feeds"); // 解析JSONArray要遍历 for (int i = 0; i < jsonArray_feeds.length(); i++) { JSONObject jsonObject_feed = jsonArray_feeds .getJSONObject(i); JSONObject jsonObject_data = jsonObject_feed .getJSONObject("data"); String jsonString_subject = jsonObject_data .getString("subject"); String jsonString_summary = jsonObject_data .getString("summary"); Map<String, String> map = new HashMap<String, String>(); map.put("subject", jsonString_subject); map.put("summary", jsonString_summary); list.add(map); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } class MyTask extends AsyncTask<String, Integer, List<Map<String, String>>> { @Override // 在子线程中完成的方法 protected List<Map<String, String>> doInBackground(String... params) { // 网络请求返回的byte数组 // 参数即URL /** [此处用到的网络请求工具类详见博客](http://blog.csdn.net/iblade/article/details/50488749) */ byte[] data = HttpURLConnHelper.loadByteFromURL(params[0]); if (data != null) { String jsonString = new String(data); List<Map<String, String>> li = jsonStringToList(jsonString); return li; } else {// 如果data为空,即网络数据请求失败 Toast.makeText(MainActivity.this, "网络异常,请检查网络", Toast.LENGTH_SHORT); } return null; } @Override protected void onPostExecute(List<Map<String, String>> li) { super.onPostExecute(li); list.addAll(li); adapter.notifyDataSetChanged(); } } }
MyAdapter中的代码:
package org.moblie.train.zday09_json; import java.util.List; import java.util.Map; import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private List<Map<String, String>> list; private Activity activity; public MyAdapter(List<Map<String, String>> list, Activity activity) { super(); this.list = list; this.activity = activity; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = activity.getLayoutInflater().inflate( R.layout.item_listview_main, parent, false); holder.subjectView = (TextView) convertView .findViewById(R.id.textSuject); holder.summaryView = (TextView) convertView .findViewById(R.id.textSummary); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.subjectView.setText(list.get(position).get("subject")); holder.summaryView.setText(list.get(position).get("summary")); return convertView; } class ViewHolder { private TextView subjectView; private TextView summaryView; } }
item_listview_activity.xml中的代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/textSuject" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="标题" /> <TextView android:id="@+id/textSummary" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="内容" /> </LinearLayout>
activity_main.xml中代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView_Main" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
我们的数据源来自网络
所以一定不要忘了在清单文件中为其设置连接网络权限
清单文件中的代码:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /> <uses-permission android:name="android.permission.INTERNET"/>
相关文章推荐
- javascript类型系统之String
- javascript类型系统之Array
- 学习JS的这些日子——十二月总结
- JS特效文字逐个显示
- js跳转
- htmlunit+Jsoup实现网页抓取
- 遇到过的好用的js框架
- 那些年遇到的js bug
- 详解javascript事件冒泡
- XML文件的解析和json的解析
- JSP+Servlert中的Filter详解
- js父页面中使用子页面的方法
- 实例讲解js验证表单项是否为空的方法
- js文章收藏
- javascript跑马灯抽奖实例讲解
- javascript返回顶部的按钮实现方法
- javascript 定义修改属性值
- js毫秒级时间戳转换Demo
- javascript 原型继承
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber