Allove Team 致力于移动应用的开发和服务(Android,J2ME,iphone,ophone)

KXML2部分详解(J2ME)

【前言/序/Jian Sun名著】 — 恶搞一下那些给到处给别人写序的 ~···
Kxml — XML解析利器,特别是在手机这种受限设备上面,小巧实用。先说一下这个工具的大致情况,总的来说是一个基于事件模型的处理机制。其中像KXmlParser.START_TAG / KXmlParser.END_TAG 这种都会处罚一个事件,而这个事件一般可以用两种方式捕获到,,然就可以进行相关的处理了。如下:

事件捕获方式一:

if(parser.nextTag() == KXmlParser.START_TAG) {
//do sth you like Allove.org & Sunjianyes.cn
}
if(parser.nextTag() == KXmlParser.END_TAG) {
//do sth you like Allove.org & Sunjianyes.cn…
}

事件捕获方式二:

if (parser.getEventType() == XmlPullParser.START_TAG) {
//do sth you like Allove.org & Sunjianyes.cn…
}
if(parser.getEventType() == KXmlParser.END_DOCUMENT) {
//do sth you like Allove.org & Sunjianyes.cn…
}

由于XML的特殊而且比较标准的树形结构的关系,所以在处理数据解析的时候也有一些比较固定的解析模式。下面是一个简要的例子:
继续阅读 »

手机课程表

手机课程表 官方网站
你是不是经常忘记今天什么课呢?又是不是时常记不得哪里做实验呢?你是不是有时惊诧的想起忘了今天还有选修课呢?这些情况是不是时常困扰着你呢!怎么办?总不能随身带张课程表吧!三分钟,只需不到三分钟,烦恼去无综。allove手机课程表,让你不再有烦恼。
Allove手机课程表是专业开发人员为学生朋友量身打造的一款实用手机软件。它集成了通常课程管理记录的常用功能,其方便性和实用性的设计初衷决定了最完美的用户体验。从界面的设计以及实用的功能来说都是一款不可多得的手机软件。
功能包括查看课表,新建课表,及在线升级功能等。

运行平台 :j2me

支持机型: 支持MIDP 2.0 CLDC 1.1 的所有机型

下载 :jad jar

拟开发手机翻译软件

最近实在是分身乏术啊,太忙了…不过在这忙碌之际秦涛还有新的idea出来,那就是手机翻译软件。通常能给自己的手机上面安装个中英文词典之类的是非常必要的,但是我想翻译软件是不是比手机词典更实用,而且功能更强劲呢?呵呵,昨天我初步研究了一下开发所需的API以及相关的资源,发现可行性还是不错的。所以这个project就这么定下来了吧,敬请关注。初步觉得我们的手机翻译软件具有如下几个功能:

1.多国语言互译;

2.添加书签,可以让用户保存一定量书签,记录下翻译过的词句;

由于才初步开始,功能设计比较弱,接下来就要看朋友们的了。希望多给点建议和意见,说说大家都希望这样一个手机软件里面增加哪些功能。小弟在此谢过啦,哈哈。等手头的事情告一段落之后便进入开发,到时我将第一时间放出下载链接。

期待您的关注

下载地址http://m.allove.org/page/Default.asp?ID=77

ALLOVE 手机天气预报 即将发布,永远免费–敬请关注

ALLOVE 手机天气预报软件即将发布,界面简单实用,永远免费!敬请关注

演示地址:http://202.114.113.56/Weather_refactor/

下载地址: 下载JAR
下载JAD

PS:这个版本是最初测试版本 我们会在这个基础上进行不断的更新和升级并修正其中的BUG !

您可以写下您的建议和您在使用过程中的BUG ,在下一个版本中我们会对其进行修复!

ALLOVETeam 专注于手机软件的研发!

AlloveTeam 敬上! 如果合适请将介绍给您的朋友!
感谢您的支持!

手机天气预报 ( 100, 200 ] 0.42 添加
手机天气预报软件 ( 100, 200 ] 0.47 添加
免费的手机天气预报 ( 0, 20 ] 0.95 添加
手机天气预报许可证 ( 0, 20 ] 2.43 添加
手机天气预报插件 ( 0, 20 ] 0.77 添加
河南省手机天气预报 ( 0, 20 ] 1.21 添加
手机天气预报查询 ( 0, 20 ] 0.83 添加
手机天气预报订制 ( 0, 20 ] 0.95 添加
n73手机天气预报 ( 0, 20 ] 1.00 添加
电信手机天气预报 ( 0, 20 ] 0.96 添加
手机天气预报订阅 ( 0, 20 ] 1.00 添加
谷歌手机天气预报 ( 0, 20 ] 1.27 添加
手机天气预报下载 ( 20, 50 ] 1.00 添加
手机天气预报mrp ( 0, 20 ] 0.74 添加
手机免费天气预报 ( 50, 100 ] 0.98 添加
手机版天气预报 ( 0, 20 ] 1.04 添加
手机定制天气预报 ( 20, 50 ] 0.98 添加
手机短信天气预报 ( 0, 20 ] 1.24 添加
天气预报手机铃声 ( 0, 20 ] 0.30 添加
手机开通天气预报 ( 0, 20 ] 1.02 添加
手机桌面天气预报 ( 0, 20 ] 0.97 添加
手机怎么订天气预报 ( 0, 20 ] 0.95 添加
天气预报软件手机版 ( 0, 20 ] 0.79 添加
手机办理天气预报 ( 0, 20 ] 0.95 添加
手机订阅天气预报

J2ME 通过HTTP读取网络图片到手机

122

public Image loadImage(String url) throws IOException {
HttpConnection hpc = null;
DataInputStream dis = null;
try {
hpc = (HttpConnection) Connector.open(url);
int length = (int) hpc.getLength();
byte[] data = new byte[length];
dis = new DataInputStream(hpc.openInputStream());
dis.readFully(data);
return Image.createImage(data, 0, data.length);
} finally {
if (hpc != null)
hpc.close();
if (dis != null)
dis.close();
}
}

源代码:

imageloadermidlet.java

j2me 实现GPS定位指南针

用J2ME 访问GPS数据 实现自己的指南针
效果图compass

支持A-GPS 的手机都可以使用!

源码贴了出来分享给大家!

源码:
compass-location

j2ME中 lwuit实现按钮缩放功能代码解析

LWUIT UI

当用户按下按钮的时候 实现缩放功能

final Button b = new Button(NameList[i], unselectedImages[i]) {

public Image getPressedIcon() {
Image i = getIcon();
return i.scaled((int) (i.getWidth() * 0.8), (int) (i.getHeight() * 0.8));
}
};

LWUIT Image 实现代码

public Image scaled(int width, int height) {
if(width == getWidth() && height == getHeight()) {
return this;
}
Dimension d = new Dimension(width, height);
Image i = getCachedImage(d);
if(i != null) {
return i;
}
i = new Image(this.image);
i.scale(width, height);
i.transform = this.transform;
cacheImage(d, i);
return i;
}

获得图片缓冲

Image getCachedImage(Dimension size) {
if(scaleCache != null) {
WeakReference w = (WeakReference)scaleCache.get(size);
if(w != null) {
return (Image)w.get();
}
}
return null;
}

J2ME 突破限制和Symbian交互 !

接触J2ME 也有一段时间了,把JME比作一个太监,过之而不及啊。操作系统对J2ME于 的Security 限制真是太多太多了,

欢迎转载   http://blog.allove.org

1.J2ME 访问用户已读的短信

2. J2ME 非认证Midlet 访问网络 PIM ,MULITIMEDIA 等等的安全警告!

3.J2me Midlet开机启动

4.操作系统IPC 进程 Device 信息 电池信息等访问

痛苦久了就会想办法去解决它了,最开始在上unix课程的时候老师 讲到Socket 标准问题,突然间有个灵感,Symbian和Midlet 能否用Socket 通信呢?Socket 既然所有的都遵循标准那么理论上面就是可行的了!

那么实现了Midlet 和操作系统的通信 那么不就可以利用J2ME 去调用那些我们无法触及的应用呢!那不是一下子让J2ME 的限制又扩展了很多了 呵呵

解决思路 就是

一个Symbian Native Services 然后 一个Midlet 访问数据  Native Services 监听来自端口的信息 接受之后进行本地处理 然后将结果返回给Midlet .

以利用J2ME 读取用户短信为例

启动 socket 服务— 监听  —- Midlet 通过Socket 向  Native Services 发送请求  —-》处理数据—-》接受数据—》Midlet处理 更多应用

Symbian 代码 片段 监听Socket

blank.Open(socketServ);
listener.Accept(blank, status);
User::WaitForRequest(status);
if(status != KErrNone) User::Leave(KErrGeneral);
gConsole->Printf(_L("Accepted connection!!n"));
blank.RecvOneOrMore(buffer, 0, status, dummyLength);
User::WaitForRequest(status);
if(status != KErrNone) User::Leave(KErrGeneral);
if( (buffer[0] == 'p') )
{
ProcessList(&buffer);
gConsole->Printf(_L("Processing process request!!n"));
}
else if( (buffer[0] == 'c') )
{
gConsole->Printf(_L("Closing server!!n"));
running = EFalse;
buffer.Copy(KClosing);
}
else
{
gConsole->Printf(_L("Bad command!!n"));
buffer.Copy(KBadCommand);
}

blank.Write(buffer, status);
User::WaitForRequest(status);
if(status != KErrNone) User::Leave(KErrGeneral);
blank.Close();
}//end of while loop
MIDLET 数据处理

import javax.microedition.io.*;
import java.io.*;

public class ClientConnection {

private NATClientMIDlet midlet;
private static String url = “socket://127.0.0.1:8100″;
//http://blog.allove.org/archives/j2me-fuck-symbian
private String request;

public ClientConnection(NATClientMIDlet midlet) {
this.midlet = midlet;
}

public void sendRequest(String message) {
this.request = message;
new Thread(){
public void run() {
if( request.equals(”") ){
midlet.showAlert(”Enter a request!”);
}else {
sendMessage();
}
}
}.start();
}

public void sendMessage() {
try{
StreamConnection conn = (StreamConnection)Connector.open(url);
OutputStream out = conn.openOutputStream();
byte[] buf = request.getBytes();
out.write(buf, 0, buf.length);
out.flush();
out.close();

byte[] data = new byte[256];
InputStream in = conn.openInputStream();
int actualLength = in.read(data);
String response = new String(data, 0, actualLength);
midlet.textBox.setString(response);

in.close();
conn.close();

}catch(IOException ioe){
ioe.printStackTrace();
midlet.showAlert(”Allove 连接失败”);
}
}

}

这里只提供了解决思想和简单的解决方案 实际应用还得与实际情况进行分析和权衡 找到合适的方案

xml数据通信的利器—-在J2ME 中使用XML传输数据

下午不知道为什么 写的东西丢失了。。。 也没有写完 就去考试 不知怎的就发布了 太搞笑了!

XML数据通信的利器

消息通信这个是一个很广泛的应用,这种设计思想也很普遍,第一次接触和理解消息设计是在操作系统上,操作系统的管道 信号量 这些都是消息通信的模型。所以消息通信广泛应用于程序设计中,今天主要讨论一下利用XML标记数据在j2ME 实现数据通信 。

我个人认为 XML 不是从这十年发展而来的,XML ->标记->数据表示 ->标记设计思想,数据标记的设计思想应该在计算机出现以前就已经被人们广泛应用了把吧。日常生活中很多地方也用到了标识的思想。如文件夹的外面的那个标签 这应该算作标记把。图书馆中对书的标识也应该算作标记。所以我认为XML 是前辈在标识设计思想中总结出来的一个定义标准.学习XML应该更多地去体会其设计思想

<xml>

<Data></Data>

</xml>

设计思想

XML的标准是一个很不错的经验总结,我们在自己实现XML 数据标识的时候往往会发现问题不是如何去XML语法的复杂 而问题是在于如何去组织XML 数据的格式组织和数据解析问题。

而且数据解析很多时候都要重新进行编写,因为往往作为通信的XML 为了节约网络占用 都会设计得很精简,除去了很多附加的代码 为了提高解析速度那么就不得不从新设计解析的顺序,特别是在CLDC 这种设备上面CPU的运算是有限的,对于XML的遍历是特别痛苦的事情。

组织XML数据格式

1.数据粒度

一个XML文件该有多大?  这个我也不知道,具体是多少 一直在思考这个问题  权衡文件访问这些问题应该能找到一个平衡点 不知道能告诉下吗?

2.数据排列顺序

数据该如何进行排列 这个主要是因为遍历的时候速度的考虑

3.标识文字

为了节约网络带宽  我一般做一个映射表 来节约带宽

人——a

脸—–b1

耳朵—–b2

<人>

<脸></脸>

<耳朵></耳朵>

</人>

通过自己写个小程序 编码后

<a>

<b1></b1>

<b2></b2>

</a>

如果数据多了的情况下能节约不少带宽

解析 XML

自己写 在PC 上面一般自己写正则表达式进行处理 也可以使用开源的XML 处理类库进行处理 因为处理能力强 和功能齐全,对于我这种初级开发者基本上用不上那些花哨的功能。我就喜欢我需要的功能  不错的一个XML 项目 KXML

对于移动设备的支持也不错!

kxml 的用法可以参考官方给的那个 例子很详细的了!
while (parser.nextTag() != XmlPullParser.END_TAG) {

parser.require(XmlPullParser.START_TAG, null, null);
String name = parser.getName();

String text = parser.nextText();

System.out.println (”<”+name+”>”+text);

if (name.equals(”title”))
title = text;
else if (name.equals(”description”))
description = text;

parser.require(XmlPullParser.END_TAG, null, name);
}

XML 资源推荐

书 《xml 高级编程》xml-guide-cn

欢迎批评!!!1

分享:SQL数据格式转换为XML数据

有很强大的数据库同步的软件和中间件支持SQL 数据到XML的转换 ,但是对于自己的项目不需要那么的功能 安装这么多东西 感觉有点得不偿失,还不如自己手写数据转换代码省事!
这个是个很激简单的数据转换的方法 供大家参考!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Pattern;

public class SqlParser implements Runnable{

private String result;
private File f;

public static void main(String[] args) {
Thread t=new Thread(new SqlParser());
t.start();

}

public String getTemplate(String fileName) {

result = "< ?xml version="1.0" encoding="gb2312"?><xml>";
try {

f = new File(fileName);
BufferedReader br = new BufferedReader(new FileReader(f));
String temp = br.readLine();
while (temp != null) {
temp = parser(temp);

result += temp + "n";
temp = br.readLine();
}
br.close();

} catch (Exception e) {
e.printStackTrace();
}

return result;
}

public String parser(String str) {
String r = "";
String temp = str;
String[] t = temp.split(",");
for (int i = 0; i < t.length; i++) {
if (i == 0) {
r += "<node><a>" + t[i] + "</a>";
} else if (i == 1) {
r += "<b>" + t[i] + "</b>";
} else if (i == 2) {
r += "<c>" + t[i] + "</c>";
} else if (i == 3) {
r += "<d>" + t[i] + "</d>";
}
}
return r;

}

public void write(String str, String filename) {
try {
File f = new File(filename);
BufferedWriter output = new BufferedWriter(new FileWriter(f));

output.write(str);
output.flush();
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
System.out.println("Start parsering........Please wait!");
System.out.println("This may take few min depend on the files length");

this.write(this.getTemplate("data.txt"), "data.xml");
System.out.println("Parser Success!");

}

}
</xml>
返回顶部