开发一个Android的便捷库,大家觉得怎么样?

漂流的代码 2015-01-22 04:24:06
在使用android开发一些程序的时候,发现有一些使用不便的地方。

比如,我开发一个需要同http服务器交互的程序。从服务器上下载文件文件、读取xml、json等格式,或者提交表单、上传文件等功能。需要编写很多代码。
1. 比如,需要解析xml和json,并转换为相应的java对象,然后在通知到界面;
2. 需要管理cookie的状态;
3. 需要管理异步下载,动态界面刷新;
4. 为了防止频繁下载一些较大文件,还必须增加一个cache系统;

虽然这些都没有技术难度,但是使用起来不方便,还需要写一堆繁琐的代码。特别是在异步下载的时候,需要很小心的管理各种状态,否则很可能就会发生各种问题。

在Android APP中有很大一部分都需要和HTTP服务交互。而且很多APP都是为网站开发的快捷应用。由此,我想到,是否可以借鉴HTML的语法和形式呢?

假如有如下的xml文件:

<!-- an view to show activity -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:x="http://scheams.easyandroid.com/easy"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<x:request name="hellworld" url="http://localhost/easyandroid/test/helloworld.xml"/>

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="$hellworld://message" />

</RelativeLayout>

x:request引入一个请求对象,url可以指定地址;name指定类型。
这个url返回一个hellowrold.xml的文件,假设这个文件的内容是:

<message>Hello</message>

那么,TextView text1的内容就是 Hello了。因为我直接做了绑定:android:text="$hellworld://message"。

他的工作原理是:
1. 当这个Layout被inflate时,request对象helloworld被创建,然后异步发出请求;
2. Activity随后展示出该页面;
3. 当helloworld成功获取数据后,根据$hellworld://message,这个XPath的知识,取出数据,然后调用setText来更新text1。

===========================分割符============================
当然,不仅仅是xml数据,也可以进入json数据。json数据可以直接按照js对象那样去调用,例如,如果上面的例子返回的是json数据,那么我们就可以这样写 $helloword:message了。

我们可以像浏览器那样,异步下载图片、音乐甚至视频数据,然后更新。我们可以集成cache功能在这个库内,这样用户就不必关心这些了。

同样的,我们还可以模仿HTML的表单语法,像HTML那样为APP写提交程序;

我们还可以定义一些能够跨Activity的request对象,让不同Activity可以共享数据。

===========================分割符====================================

至于具体的实现,方法应该很多。我的想法是通过外部工具。

开发一个工具,读取我们定义的xml文件,然后将其中描述Layout的部分提取出来,生成一个Android可以识别的Layout资源;将request以及数据绑定部分的描述提取处理,生成一些java文件。这样,就可以即不需要特殊机制去实现,也能解决性能和效率的问题。

大家觉得怎么样呢?做这样一个库有价值吗?
...全文
236 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
基本上每个项目都需要封装过这些东西,你可以自己写个库,等做第二个项目的时候,看看,有多大的通用性
漂流的代码 2015-01-23
  • 打赏
  • 举报
回复
根据大家的意见,我觉得,没有必要去使用xml文件来描述了。直接提供一个库就可以了。 比如,我可以在Activity onCreate的时候做这些事情:

HttpRequest req = new HttpRequest("http://localhost/hellowrold.xml");
req.bind("//message", findViewById(R.id.text), "android:text");
可以静态的绑定一个图片

HttpRequest.bind("http://localhost/icon.png", findViewById(R.id.image), "android:src");
如果发送一个post

HttpRequest post_req = new HttpRequest("http://localhost/post.php", HttpRquest.METHOD_POST);
post_req.setEntry("username", findViewById(R.id.edit_username), "android:text");
post_req.setEntry("password", findViewById(R.id.edit_password), "android:text");
post_req.setSubmit(findViewById(R.id.btn_submit));
漂流的代码 2015-01-23
  • 打赏
  • 举报
回复
引用 4 楼 sagittarius1988 的回复:
一个功能一个库,不要把太多的功能集到一个库里,这样的库,根据项目的不同,会有很多多余的功能
嗯,一个开发库总是在通用性与易用性直接纠结。
漂流的代码 2015-01-23
  • 打赏
  • 举报
回复
引用 2 楼 cclovescw 的回复:
基本上每个项目都需要封装过这些东西,你可以自己写个库,等做第二个项目的时候,看看,有多大的通用性
有道理。网络部分使用起来感觉不是很麻烦,毕竟Android提供的库易用性还是不错的。关键是与UI关联部分,比较繁琐和麻烦。 可以考虑从这个角度出发,提供一些自动关联的函数库来,效果会更好些。
sagittarius1988 2015-01-23
  • 打赏
  • 举报
回复
一个功能一个库,不要把太多的功能集到一个库里,这样的库,根据项目的不同,会有很多多余的功能
会敲代码的喵 2015-01-23
  • 打赏
  • 举报
回复
原来曾经做过把Message消息中心,Network网络交互以及一些常用的工具类封装成jar供程序调用,一定程度上是可以减少工作量的。但是你会发现……这个jar会越变越大……
月亮之上009 2015-01-22
  • 打赏
  • 举报
回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧