一个完整的Android ListView+网络接口读取+JSON处理的Demo
2014-02-24 09:23
423 查看
我坚信一个比较完善的项目,能比较完善的测试一把需要使用到的技术点,才能学得更快。不能直接去练习每个控件的用法,太枯燥了。
78课时,完整看完前面18课时以及常用控件的一半课时,SQLite课时。了解了四大组件,几种布局方式,几个控件以后,我觉得可以开始自己写代码了。
所以准备完成一个完整的Android ListView+网络接口读取+JSON处理的Demo。
这个需求,测试了Android开发过程中,使用频率最高的ListView控件,也使用到了网络通信读取远程Api的通信过程。
目前来看,JSON已经成了各类语言间交换数据的标准,我会比较刁钻一点,非要选择一个FastJSON来学习导入第三方库的过程。
首先,我找到了FastJSON针对Android优化的版本。
fastjson有专门的for android版本,去掉不常用的功能。jar占的字节数更小:
http://sourceforge.net/projects/fastjson/files/
更多关于FastJSON的内容可以看他们的WIKI:
https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
今天上手调试了一把,发现jsonObject也挺好用的,先就用了FastJson了。
为了方便,我把所有过程写到了主文件中。受MainActivity中不能直接访问网络,还得去拜读一下ice的文章:
http://my.eoe.cn/iceskysl/archive/4382.html
网络测试使用的接口是:
http://api.eoe.cn/client/blog?k=lists&t=top
Item尝试使用左右滑动添加删除和查看详情的功能
转自:http://my.eoe.cn/shuhai/archive/19604.html
eoeschool的学习进度:
http://www.eoeschool.com/course/show/id/26.html78课时,完整看完前面18课时以及常用控件的一半课时,SQLite课时。了解了四大组件,几种布局方式,几个控件以后,我觉得可以开始自己写代码了。
所以准备完成一个完整的Android ListView+网络接口读取+JSON处理的Demo。
这个需求,测试了Android开发过程中,使用频率最高的ListView控件,也使用到了网络通信读取远程Api的通信过程。
目前来看,JSON已经成了各类语言间交换数据的标准,我会比较刁钻一点,非要选择一个FastJSON来学习导入第三方库的过程。
首先,我找到了FastJSON针对Android优化的版本。
fastjson有专门的for android版本,去掉不常用的功能。jar占的字节数更小:
http://sourceforge.net/projects/fastjson/files/
更多关于FastJSON的内容可以看他们的WIKI:
https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
今天上手调试了一把,发现jsonObject也挺好用的,先就用了FastJson了。
为了方便,我把所有过程写到了主文件中。受MainActivity中不能直接访问网络,还得去拜读一下ice的文章:
http://my.eoe.cn/iceskysl/archive/4382.html
网络测试使用的接口是:
http://api.eoe.cn/client/blog?k=lists&t=top
效果如下:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | package cn.eoe.shuhai.eoethread; import java.io.BufferedInputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import org.apache.http.util.ByteArrayBuffer; import org.apache.http.util.EncodingUtils; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ListView lv = null; private TextView tv = null; private ArrayList<String> lvList = new ArrayList<String>(); private String more_url = null; private String urlContent = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(runnable).start(); tv = (TextView) findViewById(R.id.tv); tv.setText(" loading..."); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data = msg.getData(); String content = data.getString("content"); //尝试读取第二个页面的页面 urlContent = url_get_content(more_url); //给一个弹出层拽一把 Toast toast = Toast.makeText(getApplicationContext(), more_url, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0);//居中显示 toast.show(); //准备一个list用来存放json数组中的数据 lvList = json_decode(content); //将数组通过 adapter传递给控件 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_dropdown_item_1line, lvList); //隐藏默认的提示内容 tv.setHeight(0); //ListView加载刚刚的List lv = (ListView) findViewById(R.id.lv); lv.setAdapter(adapter); } }; Runnable runnable = new Runnable() { @Override public void run() { more_url = more_url != null ? more_url : "http://api.eoe.cn/client/blog?k=lists&t=top"; urlContent = url_get_content(more_url); Message msg = new Message(); Bundle data = new Bundle(); data.putString("content", urlContent); msg.setData(data); handler.sendMessage(msg); } }; public static String url_get_content(String url) { String myString = null; try { // 定义获取文件内容的URL URL myURL = new URL(url); // 打开URL链接 URLConnection ucon = myURL.openConnection(); // 使用InputStream,从URLConnection读取数据 InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); // 用ByteArrayBuffer缓存 ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } // 将缓存的内容转化为String,用UTF-8编码 myString = EncodingUtils.getString(baf.toByteArray(), "UTF-8"); } catch (Exception e) { // myString = e.getMessage(); myString = null; } return myString; } /** * 格式化json的结果,只取items的数组 * @param content * @return */ public ArrayList<String> json_decode(String content) { //准备一个list用来存放json数组中的数据 if(lvList == null) { ArrayList<String> lvList = new ArrayList<String>(); } try { JSONObject josnObject = new JSONObject(content); JSONArray array = josnObject.getJSONObject("response").getJSONArray("items"); //获取分页url more_url = josnObject.getJSONObject("response").getString("more_url"); int length = array.length(); for (int i = 0; i < length; i++) { JSONObject object = array.getJSONObject(i); lvList.add(object.getString("title").toString()); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return lvList; } } |
明天的计划是:
做一个滑动分页加载接口的更多内容Item尝试使用左右滑动添加删除和查看详情的功能
转自:http://my.eoe.cn/shuhai/archive/19604.html
相关文章推荐
- Android——使用Volley+fastJson在新线程中读取网络接口获取天气信息
- 【Xamarin开发 Android 系列 11】 创建一个Json读取数据应用-添加摄像头集成
- 一个基于线程池的网络处理服务器demo
- 关于Android的assets资源使用,以及网络间的数据传递JSON格式处理
- Android开发-Volley-解析Json使用方法-2-完整Demo-AndroidStudio
- 从零开发一个完整的Android项目(四)——合成JSON字符串
- Android - 网络编程 - JSON - 处理
- android上的一个网络接口和图片缓存框架enif简析
- Android开发-Volley-解析Json使用方法-2-完整Demo-AndroidStudio
- Android开发-Volley-解析Json使用方法-3-完整Demo-AndroidStudio
- 用Android Smart Image View做的一个网络图片浏览的Demo
- Android 播放网络视频的一个demo
- Android接口传递Json数组的处理方式
- 一个完整的通过encoding/json信息传递格式,采用http.POST利用进行与服务器通信,并对返回结果进行解析处理的典型案例
- Android开发-Json(二)Json数据的解析-完整Demo-AndroidStuidio
- RxJava + httpURLConnectionde 的简单测试demo,可以拿来处理一般的android访问网络的线程问题
- Android开发-Volley-解析Json使用方法-3-完整Demo-AndroidStudio
- android上的一个网络接口和图片缓存框架enif简析
- Android AIDL -通过一个比较完整的Demo快速运用