豆瓣客户端的实现08
来源:互联网 发布:主宰西游装备进阶数据 编辑:程序博客网 时间:2024/06/07 21:01
需求分析
JSON数据解析
快点实现客户端吧
开始
URL地址 http://api.douban.com/book/subject/isbn/7543632608?alt=json
返回的JSON数据
{
"category": {
"@scheme": "http://www.douban.com/2007#kind",
"@term": "http://www.douban.com/2007#book"
},
"db:tag": [
{
"@count": 126,
"@name": "片山恭一"
},
{
"@count": 60,
"@name": "日本"
},
{
"@count": 54,
"@name": "日本文学"
},
{
"@count": 37,
"@name": "小说"
},
{
"@count": 31,
"@name": "满月之夜白鲸现"
},
{
"@count": 14,
"@name": "爱情"
},
{
"@count": 8,
"@name": "純愛"
},
{
"@count": 8,
"@name": "外国文学"
}
],
"title": {
"$t": "满月之夜白鲸现"
},
"author": [
{
"name": {
"$t": "[日] 片山恭一"
}
}
],
"summary": {
"$t": "那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。"
},
"link": [
{
"@rel": "self",
"@href": "http://api.douban.com/book/subject/1220562"
},
{
"@rel": "alternate",
"@href": "http://book.douban.com/subject/1220562/"
},
{
"@rel": "image",
"@href": "http://img3.douban.com/spic/s1747553.jpg"
},
{
"@rel": "mobile",
"@href": "http://m.douban.com/book/subject/1220562/"
}
],
"db:attribute": [
{
"$t": "7543632608",
"@name": "isbn10"
},
{
"$t": "9787543632608",
"@name": "isbn13"
},
{
"$t": "满月之夜白鲸现",
"@name": "title"
},
{
"$t": "180",
"@name": "pages"
},
{
"$t": "豫人",
"@name": "translator"
},
{
"$t": "[日] 片山恭一",
"@name": "author"
},
{
"$t": "15.00元",
"@name": "price"
},
{
"$t": "青岛出版社",
"@name": "publisher"
},
{
"$t": "平装",
"@name": "binding"
},
{
"$t": "2005-1",
"@name": "pubdate"
}
],
"id": {
"$t": "http://api.douban.com/book/subject/1220562"
},
"gd:rating": {
"@min": 0,
"@numRaters": 324,
"@average": "7.0",
"@max": 10
}
}
上源码和效果图
MainActivity.java
public class MainActivity extends Activity {TextView tv_title;TextView tv_summary;LinearLayout ll_loading;@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.book_detail);tv_title = (TextView) this.findViewById(R.id.tv_title);tv_summary = (TextView) this.findViewById(R.id.tv_summary);ll_loading = (LinearLayout) this.findViewById(R.id.ll_book_detail);String isbn = "";fillData(isbn);}private void fillData(String isbn) {new AsyncTask<String, Void, Boolean>() {String title;String summary;String price;@Overrideprotected Boolean doInBackground(String... params) {// http://api.douban.com/book/subject/isbn/7543632608?alt=jsonString path = "http://api.douban.com/book/subject/isbn/7543632608?alt=json";try {URL url = new URL(path);Source source = new Source(url.openConnection());String jsonstr = source.toString();JSONObject jsonobj = new JSONObject(jsonstr);String titlestr = jsonobj.get("title").toString();JSONObject jsontitle = new JSONObject(titlestr);title = jsontitle.get("$t").toString();System.out.println(title);String summarystr = jsonobj.get("summary").toString();if (summarystr != null) {JSONObject jsonsummary = new JSONObject(summarystr);summary = jsonsummary.get("$t").toString();System.out.println(summary);}String attributestr = jsonobj.get("db:attribute").toString();JSONArray attributearray = new JSONArray(attributestr);for (int i = 0; i < attributearray.length(); i++) {JSONObject jsonatt = new JSONObject(attributearray.get(i).toString());if ("price".equals((jsonatt.get("@name").toString()))) {price = jsonatt.get("$t").toString();System.out.println(price);}}return true;} catch (Exception e) {e.printStackTrace();return false;}}@Overrideprotected void onPreExecute() {ll_loading.setVisibility(View.VISIBLE);super.onPreExecute();}@Overrideprotected void onPostExecute(Boolean result) {ll_loading.setVisibility(View.INVISIBLE);if (result) {tv_title.setText(title + "/" + price);tv_summary.setText(summary);} else {Toast.makeText(getApplicationContext(), "查看详情失败", 1).show();}super.onPostExecute(result);}}.execute(isbn);}}
book_detail.xml
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" > <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="简介" /> <TextView android:id="@+id/tv_summary" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> </TableLayout> <LinearLayout android:id="@+id/ll_book_detail" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_dark" android:gravity="center" android:visibility="invisible" > <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></FrameLayout>
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
源码分析
查看Android中 System.put.println的输出
在Logcat中找标签设置为system.out
- 豆瓣客户端的实现08
- 豆瓣客户端的实现01
- 豆瓣客户端的实现02
- 豆瓣客户端的实现03
- 豆瓣客户端的实现04
- 豆瓣客户端的实现05
- 豆瓣客户端的实现06
- 豆瓣客户端的实现07
- 豆瓣客户端的实现09 源码分析
- 豆瓣客户端的实现08 解析json数据显示在界面上
- 豆瓣网API实现客户端源码
- oauth认证----豆瓣客户端
- 高仿豆瓣客户端
- 豆瓣客户端(一)获取用户授权的access_token
- 豆瓣客户端(一)获取用户授权的access_token
- Android实现豆瓣FM的首页效果
- 豆瓣学习 - 实现左右滑动的ViewFlipper
- 个人作品 --Android豆瓣客户端
- [LeetCode] Valid Number
- Apache AB 第一个测试案例及测试结果解释
- 黑马程序员-C语言编程中include的用法
- 程序员必须知道的10大基础实用算法及其讲解
- 两个输出文件名解析为同一个输出路径:“obj\x86\Debug\SafetyValve.FormNewTest.resources”SafetyValve
- 豆瓣客户端的实现08
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers)
- 【整理】int和long long的最大值测试
- OSG:3.内存管理
- EffectiveC++第六章继承和面向对象设计学习笔记
- 大型高性能ASP.NET系统架构设计
- gerrit使用
- [ios]iOS:hidesBottomBarWhenPushed的正确用法
- svn 清理失败 (cleanup 失败) 的解决方法