??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品精品电影网,欧美一区二区免费观在线,亚洲欧美精品一区http://www.aygfsteel.com/wiser/category/20778.htmlzh-cnMon, 19 Mar 2007 21:02:29 GMTMon, 19 Mar 2007 21:02:29 GMT60J2MEE序开发新手入门九大要?/title><link>http://www.aygfsteel.com/wiser/archive/2007/03/19/104787.html</link><dc:creator>英明</dc:creator><author>英明</author><pubDate>Mon, 19 Mar 2007 11:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/wiser/archive/2007/03/19/104787.html</guid><wfw:comment>http://www.aygfsteel.com/wiser/comments/104787.html</wfw:comment><comments>http://www.aygfsteel.com/wiser/archive/2007/03/19/104787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wiser/comments/commentRss/104787.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wiser/services/trackbacks/104787.html</trackback:ping><description><![CDATA[ <p> </p> <p>[转脓自yesky]<br />一、J2ME中需要的Java基础知识<br />  现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,L从Java基础开始学习,而且现在讲Java基础的书c中都是以J2SE来讲基础Q这q学习造成了一些不必要的麻烦,下面J2ME中用到的和不需要的Java基础知识做一个简单的说明?br />  J2ME中用到的Java基础知识Q?br />   1、Java语法基础Q包括基本数据类型、关键字、运符{等<br />   2、面向对象的思想Q类和对象的概念Q承和多态等{?br />   3、异常处?br />   4、多U程<br />  J2ME中没有用到的Java基础知识Q?br />   1、JDK中javac和java命o的?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   2、Java基础中的很多cdJ2ME中没有,或者类中的Ҏ做了大量的精。所以徏议在J2ME中熟悉类库?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   3、Applet、AWT、Swingq些知识在J2ME中根本用不到?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  单说q么多,希望学J2ME的朋友们能少C些弯路,不之处希望大家U极指正和补充?<br />  二、J2ME中暂时无法完成的功能<br />  列一些J2ME中暂时无法完成的功能Q希望大家能U极补充Q?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   1、在手机中不更改代码实现ULQ主要指游戏?br />   2、动态修Ҏ钮文字?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   3、在Canvas上接受中文输入?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   4、操作本地资源、例如地址本、已收短信息{?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   5、制作破坏性的手机病毒?br />   6、其他等待大家来补充?br />  三、J2ME的跨q_?br />  J2ME技术源于JavaQ所以也hJVM的优势,可以在支持Java的^Cq行ULQ但是现在的J2ME技术在跨^C却做的很p糕Q我们来单看一下原因:<br />  1、手机的屏幕寸不一Q?br />  q个主要在界面制作上。如果你使用的是高用户界面Q比如你做的是应用开发或者用L陆、用h册这L通用功能Ӟ一般没有什么问题?br />  如果你用的是低U用L面,比如你做的是游戏Q那么你需要考虑q个问题了?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  2、厂商的扩展API不统一Q?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  例如Nokia的扩展APIcdUIpdQ在别的手机上或者没有实玎ͼ或者包名不同等{?br />  3、手机^C实现的bugQ?br />  例如Nokia?650在实现双~冲上有bugQ那么在q种机型上运行的软g׃能用双~冲。其他NOKIA上的一些bugQ可以参看:<a >http://www.cnjm.net/resfetch/EKayXl5MlY2NaSIHXDqIdRYYOhhiXo2ZYQgiaQcmaY1ha4iyCKZijcsVFcqNFWSNy6SNZMvczstkOmF1THk_</a><br />  4、手机性能问题?br />  不同手机的可用内存、最大jar文g都有要求Q例如Nokia S40的大部分手机支持的最大jar文g?4KQ最大可用内容ؓ210K?br />  所以现在的手机软gQ特别是游戏都提供支持的机型列表Q也才有了手机游戏移植h员的存在?br />  四、学习J2ME可以从事的工作种c?br />  现在J2ME技术可以说相当的火_q里介绍一些学好了J2ME之后可以从事的工作的U类Q?br />  1、J2ME游戏开发h?br />  Ҏ游戏{划或者文档要求,在某U特定的机型(以Nokia S40或S60居多)开发游戏程序。这是现在大部分J2MEE序员从事的工作?br />  需要熟l掌握:高用户界面、低U用L面、线E,如果是网l游戏,q需要熟l网l编E?br />  2、J2ME应用开发h?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  现在的移动应用还不是很多Q但是还是出C一些,特别是移动定位以及移动商务相关的内容。需要熟l掌握:高用户界面、线E和|络~程?br />  3、J2ME游戏UL人员<br />  参照源代码,可以在一个^C可以q行的游戏移植到其他q_上去。例如将Nokia S40的游戏移植到S60上,或者烦qT618{等。主要是控制屏幕坐标Q有些可能需要替换一些API?br />  需要熟悉各q_之间的差异以及相关的技术参敎ͼ比如屏幕大小、最大jar文g寸{等?br />  五、J2MEE序设计的几个原?br />  1、用面向对象编E?br />  虽然使用面向q程~程可以减小文g的尺寸,但是Z以后l护的方便和利于扩展Q还是要使用面向对象~程?br />  2、用MVC模式<br />  模型、界面和控制分离。现在很多的E序三者合一Q但是如果你做的E序比较大的话,q是你进行分R?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  3、自动存储用戯?br />  使用RMS来存储用L信息Q例如存储用户上ơ输入的用户名、密码、用户对于系l的讑֮{,q样不仅可以减少用户的输入,而且对用户友好。很多程序甚臛_了自动登陆等?br />  4、一些系l设|允许用户关闭。如背景音乐、背景灯昄{?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  5、将低用户界面的绘制动作放在一个独立的U程里面厅R?br />  6、在需要大量时间才能完成的工作Ӟl用户一个等待界面?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  六、从模拟器到真机试<br />  对于J2ME开发者来_模拟器给我们带来了很多方便,比如可以在模拟器中调试程序以及很方便的察看程序的效果Q但是模拟器也给我们带来了一些问题,比如模拟器实现的bug{等Q所以进行真机测试是必须的?br />  1、ؓ什么要q行真机试Q?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  因ؓ模拟器程序可能存在bugQ以及真机的性能有限Q所以必进行真机测试?br />  2、如何将E序传输到机器中Q?br />  程序传输到机器中有如下方式Q?br />   a) OTA下蝲<br />   b) 使用数据U传?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   c) U外传输 </p> <p>JAVA手机|[www.cnjm.net] </p> <p>   d) 蓝牙<br />  你可以根据条Ӟ选择合适的方式?br />  3?真机试主要什么? </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  真机试的内容很多,主要试以下几个斚wQ?br />   a) E序的功?br />   b) E序的操作性,是否易操?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>JAVA手机|[www.cnjm.net] </p> <p>   c) E序的大?比如Nokia S40pd的手机大部分接受的最大文件尺ؓ64K<br />   d) E序q行速度Q速度是否可以忍受?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  七、从WTK到厂商SDK<br />  对于J2ME爱好者来_基本上大安是从SUN的WTK(J2ME Wireless Toolkit)开始的Q但是对于实际应用来_仅仅使用WTK是远q不够的Q所以在学习q程中,必须完成从WTK到SDK的跨?br />  1、厂商SDK的下载地址Q?br />  ·Nokia <br />  Nokia不愧为手业的老大Q对于j2me的支持也是一的Q有专门的网站提供SDK和各U文档说明?br />  |址是:<a >http://www.cnjm.net/resfetch/Dbvxamo8cwoKpIh4z44.G4iEykM.MYiOPzEbCpMx8QrKGwv7TD.xao4N</a><br />  ·Siemens </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  Siemens对于J2ME的支持也不错Q它提供了SDKQ模拟器需要独立安装。下载地址如下Q?br /><a >http://www.cnjm.net/resfetch/BVBDcHC9yrySkj0S7e24pIs9PnCLEqR77T4GZi5wS8qLLu0upMpLjS6SvRIGcD7qku0-i6RLPsq9OjfEPqTCQkUOt6kgPoukIC6kuEJFDnqpxC59cEJFDnqpvYuNDhSpPYuNDrepcIuNDuu3t7epOouNDrc_</a><br />  ·SonyEricsson </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  SonyEricsson SDK以及自己的模拟器Q下载地址为:<br /> [url]http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp/url]<br /><a >http://www.cnjm.net/resfetch/BEe.ZGSB34qK5B9NqS2pZHWSH9stlFti26l4xsYfsFt4H-RbeLCKlGLEYi0fgeRisGSKlB-SsC0fQ5RFv6lkW0PGgQ__</a><br />  ·Motorola<br />  Motorola提供了专门的SDKQ内部包含模拟器Q下载地址为:<br /><a >http://www.cnjm.net/resfetch/EKayXl5MlY2NPj4-OiYHXgeIBxZiazqIByaNJgdeB2sHImGNTIh1gAcmYjrBdUw_</a></p> <p>JAVA手机|[www.cnjm.net] </p> <p>  ·SamSung </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  SamSung也提供了专门的SDK和模拟器Q下载地址为:<br /><a >http://www.cnjm.net/resfetch/CnUnZGQjjsPDP7oJunRUI7phlNiAL9hs4OwvVP9FdLqUb1Qvw7rg7MOjYVTgZPn9VOC6w...2MP..9j5L4BF4JRL2CPfI.kvuuBs-UU.BC4p.v4_</a><br />  ·NECQ?br />  NEC也提供了集成模拟器的SDKQ下载地址为: </p> <p>JAVA手机|[www.cnjm.net] </p> <p> <a >http://www.cnjm.net/resfetch/Ig9UMDBaS5eXGxsbLMm43HD4NMZquMmDLNzh-JfcyQ__</a> <br />  2、厂商SDK和WTK有什么不同? </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  厂商SDK最单的理解是在WTK的基上增加了自己的模拟器和自q扩展API。也是_你在使用厂商的SDKӞ可以使用厂商的扩展类库,例如Nokia的UIcdQ和厂商自己的模拟器而已。每个厂商的扩展API都不多,而且不尽相同?br />  3、如何用?<br />  有些厂商SDK的用都和WTK相同Q例如SamSung。Nokia提供了独立的界面来开发,但是q个界面在实际开发中使用不多?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  4、厂商SDK的问?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  厂商SDK实现q程中,有一些bugQ而且和真机实C一致。例如NOKIA的؜xN题等{?br />  八、在J2ME中获得手机IMEI的方?br />  IMEI是Internation mobile entity identification的简Uͼ在手Z输入*#06#可以昄该数字,长度?5位,全球唯一Q永q不会冲H,所以可以作别用L一个标志?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  下面是在J2ME中获得IMEI的方法:<br />  1、MOTOpd的手机可以通过dpȝ的IMEI属性获得,代码如下Q?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>   String imei = System.getProperty("IMEI");<br />  2、SIEMENSpd的手机可以通过dpȝ的com.siemens.IMEI属性获得,代码如下Q?br />   String imei = System.getProperty("com.siemens.IMEI");<br />  九、J2ME|络q接中显C问题的解决办法 </p> <p>JAVA手机|[www.cnjm.net] </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  在网l编E中Q有些时候会出现一些在没有接收到网l数据就昄界面的,造成界面昄不符合要求(例如公告昄Q会先显C公告的背景囄再显C公告信息)Q这里提一个简单的解决办法l大Ӟ </p> <p>JAVA手机|[www.cnjm.net] </p> <p>  解决q种情况的方法分成三个步骤:<br />  1、在需要显C的界面中,调用发送网l数据的Ҏ。每ơ显C时调用该构造方法,不调用Display的setCurrentҎ昄?</p> <p>JAVA手机|[www.cnjm.net] </p> <p>  2、显C等待界?例如q度条等)Q给用户提示Q在q行|络q接?br />  3、在处理|络反馈的数据完以后Q调用Display的setCurrentҎ昄昄当前界面?/p> <img src ="http://www.aygfsteel.com/wiser/aggbug/104787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wiser/" target="_blank">英明</a> 2007-03-19 19:20 <a href="http://www.aygfsteel.com/wiser/archive/2007/03/19/104787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME API 速查手册分卷下蝲http://www.aygfsteel.com/wiser/archive/2007/03/19/104758.html英明英明Mon, 19 Mar 2007 08:31:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/19/104758.htmlhttp://www.aygfsteel.com/wiser/comments/104758.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/19/104758.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104758.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104758.html

J2ME API 速查手册 ver 0.7

By j2medev.com
本手册包含如下内?/b>
J2ME Web Services RPC (JSR 172)
J2ME Web Services XML (JSR 172)
Java APIs for Bluetooth (JSR 82)
Location API (JSR 179)
MID Profile 2.0 (JSR-118)
Mobile Media API 1.1 (JSR-135)
Mobile 3D Graphics API (JSR184)
PDA Pim 1.0 (JSR 75)
PDA FileConnection (JSR 75)
J2ME Web Services RPC (JSR 172)
Scalable 2D Vector Graphics API (JSR-226)
SIP API (JSR 180)
Wireless Messaging API 1.0 (JSR 120)
WTK2.2 相关文档
Nokia UI API 1.1


http://www.aygfsteel.com/Files/wiser/j2meapi.part1.rar
http://www.aygfsteel.com/Files/wiser/j2meapi.part2.rar
http://www.aygfsteel.com/Files/wiser/j2meapi.part3.rar
http://www.aygfsteel.com/Files/wiser/j2meapi.part4.rar
http://www.aygfsteel.com/Files/wiser/j2meapi.part5.rar

英明 2007-03-19 16:31 发表评论
]]>
NokiaS40和S60开发^?.0已知问题http://www.aygfsteel.com/wiser/archive/2007/03/19/104752.html英明英明Mon, 19 Mar 2007 08:16:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/19/104752.htmlhttp://www.aygfsteel.com/wiser/comments/104752.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/19/104752.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104752.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104752.htmlNokiaS40和S60开发^?.0已知问题(转脓)

作者:陈跃?

Q?a >http://blog.csdn.net/mailbomb

1?Nokia3300不支MMA(声音处理)cd?

2?Image.getGraphics()Ҏ在不同的软g版本中工作不同,该方法无法在新版本的7650?650和N-Gage中正常工作。即q些机器中无法实现双~冲技术?

3?Nokia7650?650和N-GageQ无法控制背景灯和震动?

4?同时播放声音在S60模拟器上可以q行Q但是真Z支持?

5?7650不支持WMA(短信息API)?

6??210SDK1.0中softkey1和softkey2也生left和right按键代码?

7?在S60中堆内存不同。一般S60讑֤?MQ?600只有1.6M?

8?记录集枚N题。在S40SDK和真ZQ用RecordStore.deleteRecord(id)以后Q枚丑ַ作不正常?

9?Nokia6230 MIDP Concept SDK beta0.2不支持CLDC1.1?

10?NUL字符(0x00)在TextBox中有问题。S401.0 SDK和真Z都存在该问题?

11?如果MIDlet在后台运行时QMIDI声音不停止。S601.0中存在该问题?

12?当正在运行的MIDlet被系lScreen隐含调用的类选择昄屏幕时有问题。在S60 1.0中存在该问题?

13?S40界面风格中的字体大小不一致。在S40 1.0SDK和真机,以及7250i?100?108?200中?

14?Item.getLable()Ҏ在ChoiceGroup中无法返回正的label?

15?在Nokia MIDP 1.0中,DeviceControl.setLights(0,0)没有关闭键区灯。屏q等关闭Q而键区等依然亮着。涉及具有翻键盘的S40 1.0讑֤?

16?在S60 1.0讑֤中,Date对象无法q回当前旉?

详细文档参看Q?

http://www.forum.nokia.com/ndsCookieBuilder?fileParamID=3895



英明 2007-03-19 16:16 发表评论
]]>
J2ME中的page~码转化http://www.aygfsteel.com/wiser/archive/2007/03/19/104734.html英明英明Mon, 19 Mar 2007 06:27:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/19/104734.htmlhttp://www.aygfsteel.com/wiser/comments/104734.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/19/104734.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104734.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104734.html

作?cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)
原文:http://www.matrix.org.cn/resource/article/44/44154_j2me.html
关键?j2meQ页面,~码Qؕ?br />一、摘?br />Ҏxinshouj2me在j2me版提出的“httpconnection|络q接的问题?/a>Q本人分析了一下:׃www.163.com上的面~码为gb2312Q所以用utf8d׃~码方式不同会得Cؕ码。于是本人根据page的编码灵z进行编码{化,在此与大家共享、讨论?br />二、代码分?br />1.HttpConnectionHandler接口c?br />最好根据page的编码灵z进行编码{化,于是本h定义了一个HttpConnectionHandler接口c:
HttpConnectionHandler.java

				
package com.bjinfotech.practice.j2me.httpConnection;

import java.util.Hashtable;
import javax.microedition.io.HttpConnection;

/**
* Httpq接处理器接?br /> * @author cleverpig
*
*/
public interface HttpConnectionHandler {
        //httph帔R
        public static final String RQH_HOST="X-Online-Host";
        public static final String RQH_ACCEPT="Accept";
        public static final String RQH_CONTENT_LANGUAGE="Content-Language";
        public static final String RQH_CONTENT_TYPE="Content-Type";
        public static final String RQH_CONNECTION_OPTION="Connection";
        //http回应帔R
        public static final String RSH_DATE="Date";
        public static final String RSH_SERVER="Server";
        public static final String RSH_MODIFIEDDATE="Last-Modified";
        public static final String RSH_CONTENT_ENCODING="Content-Encoding";
        public static final String RSH_CONTENT_LENGTH="Content-Length";
        public static final String RSH_CONTENT_TYPE="Content-Type";
        
        public boolean putRequestHeaderProperty(
                        HttpConnection conn,
                        String key,
                        String keyValue);
        
        public String getResponseHeaderProperty(
                        HttpConnection conn,
                        String key);
        
        public boolean setRequestMethod(
                        HttpConnection conn,
                        String methodName);
        
        public boolean putRequestHeader(
                        HttpConnection conn,
                        Hashtable propertiesPair);
        
        public Hashtable getResponseHeader(
                        HttpConnection conn,
                        String[] propertyNames);
        
        public boolean sendRequestData(
                        HttpConnection conn,
                        Object sendData);
        
        public Object getResponseData(HttpConnection conn);
        
}

2.HTML_HttpConnectionHandlerImplc?br />ҎHttpConnectionHandler接口规范实现了该接口——HTML_HttpConnectionHandlerImplcR?br />HTML_HttpConnectionHandlerImpl.java

package com.bjinfotech.practice.j2me.httpConnection;

import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Enumeration;
import javax.microedition.io.HttpConnection;

/**
* httpq接处理器实?br /> * @author cleverpig
*
*/
public class HTML_HttpConnectionHandlerImpl implements HttpConnectionHandler{
        private String message="";
        
        public HTML_HttpConnectionHandlerImpl(){
        }
        
        public boolean putRequestHeaderProperty(
                        HttpConnection conn,
                        String key,
                        String keyValue){
                message="";
                try{
                        conn.setRequestProperty(key,keyValue);
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                }
                return false;
        }
        
        public String getResponseHeaderProperty(
                        HttpConnection conn,
                        String key){
                return conn.getRequestProperty(key);
        }
        
        public boolean putRequestHeader(
                        HttpConnection conn,
                        Hashtable propertiesPair){
                Enumeration keyEnumer=propertiesPair.keys();
                boolean result=true;
                while(keyEnumer.hasMoreElements()){
                        String keyName=(String)keyEnumer.nextElement();
                        String keyValue=(String)propertiesPair.get(keyName);
                        if (putRequestHeaderProperty(conn,keyName,keyValue)==false){
                                result=false;
                        }
                }
                return result;
        }
        
        public boolean setRequestMethod(
                        HttpConnection conn,
                        String methodName){
                message="";
                try{
                        conn.setRequestMethod(methodName);
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return false;
                }
        }
        
        public Hashtable getResponseHeader(
                        HttpConnection conn,
                        String[] propertyNames){
                Hashtable result=new Hashtable();
                for(int i=0;i<propertyNames.length;i++){
                        String keyValue=conn.getRequestProperty(propertyNames[i]);
                        result.put(propertyNames[i],keyValue);
                }
                return result;
        }
        
        public boolean sendRequestData(
                        HttpConnection conn,
                        Object sendData){
                message="";
                try{
                        DataOutputStream os=conn.openDataOutputStream();
                        os.writeUTF((String)(sendData));
                        os.flush();
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return false;
                }
        }
        
        public Object getResponseData(HttpConnection conn){
                DataInputStream is=null;
                message="";
                try{
                        is=conn.openDataInputStream();
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return null;
                }
                
                byte[] data=null;
                String type=getResponseHeaderProperty(conn,RSH_CONTENT_TYPE);
                int len = 0;
                try{
                        len=Integer.parseInt(getResponseHeaderProperty(conn,RSH_CONTENT_LENGTH));
                }
                catch(Exception ex){
                        len=0;
                }
                if (len > 0) {
             int actual = 0;
             int bytesread = 0 ;
             data = new byte[len];
             while ((bytesread != len) && (actual != -1)) {
                     try{
                             actual = is.read(data, bytesread, len - bytesread);
                             bytesread += actual;
                     }
                     catch(Exception ex){
                             message=ex.getMessage();
                             return null;
                     }
             }
        } else {
            int ch;
            Vector vbuffer=new Vector();
            try{
                    while ((ch = is.read()) != -1) {
                            vbuffer.addElement(new Integer(ch));
                    }
            }
                       catch(Exception ex){
                                message=ex.getMessage();
                                return null;
                       }
            len=vbuffer.size();
            data = new byte[len];
            for(int i=0;i<len;i++){
                    data[i]=((Integer)vbuffer.elementAt(i)).byteValue();
            }
        }
        
        String result=new String(data);
        int flagBeginPosition=result.indexOf("charset=");
        int flagEndPosition=result.indexOf("\">",flagBeginPosition);
        if (flagEndPosition>flagBeginPosition){
                type=result.substring(flagBeginPosition+"charset=".length(),flagEndPosition);
        }
        System.out.println("获得html字符?"+type);
        if (type!=null){
                
                try{
                        result=new String(data,type);
                }
                catch(Exception ex){
                        message=ex.getMessage();
                }
        }
        return result;
        }
        
        public String getMessage(){
                return message;
        }
        
        
}


上面实现cMҎpage中的实际~码cd对html字符串进行了~码转化Q这样就实现了page~码的灵z{化?br />虽然灉|性加ZQ但是对于内存的占用也随之增加了一倍?br />?试代码

package com.bjinfotech.practice.j2me.httpConnection;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.io.HttpConnection;
import javax.microedition.io.Connector;
import java.util.Hashtable;

public class HttpConnectionMIDlet extends MIDlet {

        public HttpConnectionMIDlet() {
                super();
        }

        
        protected void startApp() throws MIDletStateChangeException {
                HTML_HttpConnectionHandlerImpl handler=new HTML_HttpConnectionHandlerImpl();
                try{
                        String host="10.11.3.99";
                        String url="http://10.11.3.99:8080/test_gbk.html";
//                        String url="http://10.11.3.99:8080/test_gb2312.html";
//                        String url="http://10.11.3.99:8080/test_utf8.html";
                        
                        HttpConnection conn=(HttpConnection)Connector.open(url);
                        if (conn.getResponseCode()==HttpConnection.HTTP_OK){
                                System.out.println("建立q接成功");
                                
                                Hashtable requestHeaderPair=new Hashtable();
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_HOST,
                                                host);
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONTENT_TYPE,
                                                "application/octet-stream");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONTENT_LANGUAGE,
                                                "en-US");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_ACCEPT,
                                                "application/octet-stream");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONNECTION_OPTION,
                                                "Keep-Alive");
                                handler.putRequestHeader(conn,requestHeaderPair);
                                handler.setRequestMethod(conn,HttpConnection.GET);
                                handler.sendRequestData(conn,"GET / HTTP/1.1");
                                if (conn.getResponseCode()==HttpConnection.HTTP_OK){
                                        System.out.println("发送请求成?);
                                        
                                        System.out.println("获得回应数据");
                                        String reponseData=(String)handler.getResponseData(conn);
                                        System.out.println(reponseData);
                                }
                                else{
                                        System.out.println("发送请求失?);
                                        System.out.println("错误信息:"+handler.getMessage());
                                }
                        }
                        else{
                                System.out.println("建立q接p|");
                        }
                }
                catch(Exception ex){
                        System.out.println("错误信息:"+handler.getMessage());
                        ex.printStackTrace();
                }
                

        }
        
        protected void pauseApp() {
                

        }

        protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
                

        }

}


更多问题Q请?a >Matrix J2me?/a>讨论

英明 2007-03-19 14:27 发表评论
]]>
NetConnection?/title><link>http://www.aygfsteel.com/wiser/archive/2007/03/17/104492.html</link><dc:creator>英明</dc:creator><author>英明</author><pubDate>Sat, 17 Mar 2007 10:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/wiser/archive/2007/03/17/104492.html</guid><wfw:comment>http://www.aygfsteel.com/wiser/comments/104492.html</wfw:comment><comments>http://www.aygfsteel.com/wiser/archive/2007/03/17/104492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wiser/comments/commentRss/104492.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wiser/services/trackbacks/104492.html</trackback:ping><description><![CDATA[ <p> </p> <p>一、“NetConnection”简介:<br />转述Matrix上zhengyun_ustc所qͼ“你的HttpConnection是否装的够健壮呢Q遇到各U情况,你是否有信心应对呢?譬如_你要h的Response包实在太大,以至于运营商l你掐了告诉你说时Q譬如说你是不是总要自己写一个线E来专门作httpq接Q譬如说有一些移动运营商讄了caching proxy serversQ妨了你的试。?br />Z解决q个问题Q一位日本程序员“JAY-F”针对MIDP1.0提供了一Urobust的“NetConnection”封装。这个HttpConnnectionc负责管理连接ƈ易于使用?br />二、“NetConnection”特性:<br />1. 跨过Proxy-serverȝQ?br />一些移动网l放|了代理服务器用来提高访问速度Q但是它的cache也成Z开发h员测?调试E序的一大障。“NetConnection”类使用一个简单的http request属性将server上的代理功能关闭掉?br />2. 使用U程分离的连接模式:<br />本类可以使用单线E、多U程两种模式q行Q只要设|一个简单的标志卛_?br />3. 支持Http request rangeQ?br />׃服务商在其网l上可能存在一些针对回应数据最大长度的限制Q所以“NetConnection”类提供了构造request URL的功能回应数据分ؓ多个数据包。从而去除了前面的限制?br />三、netConnection是如何实现的Q?br />1。netConnectioncȝ构分析:<br />此类实现了Runnable接口Q其q行模式支持多线E模式:当前只能׃个线E用资源,其它U程wait?br />此类使用了一些静态成员变量:</p> <pre> <br />        //当前只能׃个线E用singleton?br />        private static NetConnection singleton = new NetConnection();<br /><br />        private static HttpConnection httpConn;<br /><br />        private static String url;<br /><br />        private static String method;<br /><br />        private static byte[] data;<br />                <br /><br />        private static String contentType;<br />        <br /><br />        private static long lowRange;<br />        <br /><br />        private static long highRange;<br />        <br /><br />        private static boolean disableProxy;<br />        <br /><br />        private static boolean detached;<br />        <br />        private static byte[] response;<br /></pre> <br />cL法:<pre><br />//U程runҎ<br />public void run()<br /><br />//当前q行的线E执行完毕后Q通报l其它的׃{待资源而wait状态的U程<br />private synchronized void forceNotify() <br /><br />//当资源正在被其它U程使用Ӟ当前U程q入wait状?br />private synchronized void forceWait()<br /><br />//关闭httpq接<br />private static void severConnection()<br /></pre><br />׃使用了这些static成员变量Q所以一些操作方法需要同步(synchronizedQ?br />2。netConnection核心代码解析Q?br />netConnectioncȝ实现思想很简单,是讄一些request属性和对于GETҎ构造一个特D的URL。更重要的是其作者对http协议的深入理解、严谨的代码风格值得吾辈学习、研I。这也是本h分析其核心代码的一大原因?pre><br />/**<br /> * 实现了连接逻辑?br /> * 调用者可以在分离的线E中使用netConnectioncȝ静态连接?br /> * @throws IllegalStateException 如果此方法直接其它类调用则抛异常<br /> */<br />public void run() {<br />        <br />        if (url == null) {<br />                throw new IllegalStateException("Cannot invoke this method!");<br />        }<br /><br />        <br />        DataOutputStream dos = null;<br />        DataInputStream dis = null;<br />        StringBuffer buffer = null;<br /><br />        try {<br /><br />                int permissions = 0;<br />                <br />                //Ҏmethod|讄Connector的权限(READ/READ_WRITEQ?br />                if (HttpConnection.GET.equals(method)) {<br />                        permissions = Connector.READ;<br />                } else if (HttpConnection.POST.equals(method)) {<br />                        permissions = Connector.READ_WRITE;<br />                }<br />                <br />                //如果关闭server代理功能Q则构造noProxyUrl?br />                //原理Q用timestamp作ؓ该URL中no-proxy参数|<br />                //        致server视其为client发来的新h?br />                if (disableProxy) {<br />                        <br />                        boolean hasQueryParams = false;<br />                        <br />                        char[] ca = url.toCharArray();<br />                        //判断原URL中是否含有参?br />                        for (int loop = 0; loop < url.length(); loop++) {<br />                                <br />                                if (ca[loop] == '?') {<br />                                        hasQueryParams = true;<br />                                        break;<br />                                }<br />                        }<br />                        <br />                        //׃需要多ơ字W串拼接Q所以用可提供效率的StringBufferc?br />                        StringBuffer noProxyUrl = new StringBuffer();<br /><br />                        //原URL内容复制到noProxyUrl<br />                        noProxyUrl.append(url);<br /><br />                        //如果原URL中含有参敎ͼ<br />                        //  则需要在noProxyUrl中增?&"Q?br />                        //  否则直接在noProxyUrl中增??"Q?br />                        //  q样做ؓ了后面增加no-proxy参数做准备?br />                        if (hasQueryParams) {<br />                                noProxyUrl.append("&");<br />                        } else {<br />                                noProxyUrl.append("?");<br />                        }<br /><br />                        //增加no-proxy参数<br />                        noProxyUrl.append("no-proxy=");<br />                        noProxyUrl.append(System.currentTimeMillis()); // timestamp<br />                        <br />                        //构造好的noProxyUrl复制到原URL<br />                        url = noProxyUrl.toString();<br />                }<br />                <br />                <br /><br />                // 打开Http q接<br />                httpConn = (HttpConnection) Connector.open(url, permissions, true);<br />                //讄requestҎ<br />                httpConn.setRequestMethod(method);<br /><br />                //如果request权限为READQ即requestҎ为GETQ,<br />                //则需要设|http request属性的Range?br />                //原理Q设|http request属性的Range后的Q?br />                //        server接收到该request后将把response数据分成部分发回?br />                //        从而避免了部分q营商对http response size的限制?br />                if (permissions == Connector.READ) {        <br />                        if (lowRange > -1 && lowRange < highRange) {<br />                                StringBuffer range = new StringBuffer();<br />                                <br />                                range.append("bytes=");<br />                                range.append(lowRange);<br />                                range.append("-");<br />                                range.append(highRange);<br />                                <br />                                httpConn.setRequestProperty("Range", range.toString());<br />                        }<br />                //否则Qrequest权限为READ_WRITEQ即requestҎ为POSTQ,<br />                //那么讄request的Content-Type属性?br />                } else if (permissions == Connector.READ_WRITE) {<br />                        // POST request<br />                        httpConn.setRequestProperty("Content-Type", contentType);<br />                        dos = httpConn.openDataOutputStream();<br />                        dos.write(data);<br />                }<br />        <br />        } catch (Exception e) {<br />        <br />                exceptionPipe = e;<br />                //如果E序q行在多U程模式Q则在异常发生后需要唤醒其它睡眠的U程l箋run<br />                if (detached) {<br />                        forceNotify();<br />                }<br />                <br />                return;<br />                <br />        } finally {<br /><br />                try {<br />                        try {<br />                                if (dos != null) {<br />                                        // 关闭dos<br />                                        dos.close();<br />                                }<br />                        } catch (Exception e) {<br />                                // 如果E序q行在多U程模式Q则在异常发生后需要唤醒其它睡眠的U程l箋run<br />                                if (exceptionPipe == null) {<br />                                        exceptionPipe = e;<br />                                        <br />                                        if (detached) {<br />                                                forceNotify();<br />                                        }<br />                                        return;<br />                                }<br />                        } finally {<br />                                dos = null;<br />                        }<br />                        <br />                        // dhttpq接的回应代?br />                        int responseCode = httpConn.getResponseCode();<br />                        <br />                        //当requestҎ为GETQƈ讄了request rangeӞ接收到的回应代码为HTTP_PARTIAL<br />                        //当requestҎ为POSTQ接收到的回应代码ؓHTTP_OK<br />                        //如果上述两种回应代码均没有收刎ͼ则表明连接失败或者出问题<br />                        if (responseCode != HttpConnection.HTTP_OK<br />                                        && responseCode != HttpConnection.HTTP_PARTIAL) {<br /><br />                                if (exceptionPipe == null) {<br />                                        StringBuffer errorCode = new StringBuffer();<br />                                        errorCode.append("Response code from server: ");<br />                                        errorCode.append(responseCode);<br />                                        errorCode.append("\nMessage: [");<br />                                        errorCode.append(httpConn.getResponseMessage());<br />                                        errorCode.append("]");<br />                                        <br />                                        exceptionPipe = new IOException(errorCode.toString());<br />                                        <br />                                        if (detached) {<br />                                                forceNotify();<br />                                        }<br />                                        return;<br />                                }<br />                        }<br /><br />                        //如果收到了上q的两种回应代码之一Q则可以l箋dserver的response数据<br />                        dis = httpConn.openDataInputStream();<br /><br />                        //循环drepsonse数据<br />                        int ch;<br />                        buffer = new StringBuffer();<br />                while ((ch = dis.read()) != -1) {<br />                        buffer.append((char) ch);<br />                }<br /><br />                //response数据q行必要的编码{换               ?<br />                        response = buffer.toString().getBytes("ISO8859_1");<br />                        //接收到回应后Q表明整个http会话q程l束Q线E将l束?br />                        //如果E序q行在多U程模式Q则此时需要唤醒其它睡眠的U程l箋run<br />                        if (detached) {<br />                                forceNotify();<br />                        }<br />                        <br />                        return;<br /><br />                } catch (Exception e) {<br />                        <br />                        if (exceptionPipe == null) {<br />                                exceptionPipe = e;<br />                                <br />                                if (detached) {<br />                                        forceNotify();<br />                                }<br />                                <br />                                return;<br />                        }<br />                } finally {<br />                    <br />                        try {<br />                                if (dis != null) {<br />                                        // 关闭dis<br />                                        dis.close();<br />                                }<br />                        } catch (Exception e) {<br />                                // 若关闭dis时发生异常,则进行异常处?br />                                if (exceptionPipe == null) {<br />                                        exceptionPipe = e;<br />                                        <br />                                        if (detached) {<br />                                                forceNotify();<br />                                        }<br />                                        return;<br />                                }<br />                        } finally {<br />                                dis = null;<br />                        }<br />                        <br />                        try {<br />                                if (httpConn != null) {<br />                                        //关闭httpq接<br />                                        httpConn.close();<br /><br />                                        httpConn = null;<br />                                }<br />                        } catch (Exception e) {<br /><br />                                if (exceptionPipe == null) {<br />                                        exceptionPipe = e;<br />                                        <br />                                        if (detached) {<br />                                                forceNotify();<br />                                        }<br />                                        return;<br />                                }<br />                        }<br />                }<br />        }<br />}<br /></pre><br />五、参考资料:<br /><a ><u>联系netConnection作者:JAY-F</u></a><br /><a ><u>源代码下?/u></a><br /><a ><u>HTTP/1.1定义</u></a><img src ="http://www.aygfsteel.com/wiser/aggbug/104492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wiser/" target="_blank">英明</a> 2007-03-17 18:00 <a href="http://www.aygfsteel.com/wiser/archive/2007/03/17/104492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MIME内容cd列表http://www.aygfsteel.com/wiser/archive/2007/03/17/104420.html英明英明Sat, 17 Mar 2007 04:28:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/17/104420.htmlhttp://www.aygfsteel.com/wiser/comments/104420.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/17/104420.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104420.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104420.htmlMIMEcd列表

Mime-Typ Dateiendung(en) Bedeutung
application/acad *.dwg AutoCAD-Dateien (nach NCSA)
application/applefile AppleFile-Dateien
application/astound *.asd *.asn Astound-Dateien
application/dsptype *.tsp TSP-Dateien
application/dxf *.dxf AutoCAD-Dateien (nach CERN)
application/futuresplash *.spl Flash Futuresplash-Dateien
application/gzip *.gz GNU Zip-Dateien
application/listenup *.ptlk Listenup-Dateien
application/mac-binhex40 *.hqx Macintosh Binär-Dateien
application/mbedlet *.mbd Mbedlet-Dateien
application/mif *.mif FrameMaker Interchange Format Dateien
application/msexcel *.xls *.xla Microsoft Excel Dateien
application/mshelp *.hlp *.chm Microsoft Windows Hilfe Dateien
application/mspowerpoint *.ppt *.ppz *.pps *.pot Microsoft Powerpoint Dateien
application/msword *.doc *.dot Microsoft Word Dateien
application/octet-stream *.bin *.exe *.com *.dll *.class Ausführbare Dateien
application/oda *.oda Oda-Dateien
application/pdf *.pdf Adobe PDF-Dateien
application/postscript *.ai *.eps *.ps Adobe Postscript-Dateien
application/rtc *.rtc RTC-Dateien
application/rtf *.rtf Microsoft RTF-Dateien
application/studiom *.smp Studiom-Dateien
application/toolbook *.tbk Toolbook-Dateien
application/vocaltec-media-desc *.vmd Vocaltec Mediadesc-Dateien
application/vocaltec-media-file *.vmf Vocaltec Media-Dateien
application/x-bcpio *.bcpio BCPIO-Dateien
application/x-compress *.z -Dateien
application/x-cpio *.cpio CPIO-Dateien
application/x-csh *.csh C-Shellscript-Dateien
application/x-director *.dcr *.dir *.dxr -Dateien
application/x-dvi *.dvi DVI-Dateien
application/x-envoy *.evy Envoy-Dateien
application/x-gtar *.gtar GNU tar-Archiv-Dateien
application/x-hdf *.hdf HDF-Dateien
application/x-httpd-php *.php *.phtml PHP-Dateien
application/x-javascript *.js serverseitige JavaScript-Dateien
application/x-latex *.latex Latex-Quelldateien
application/x-macbinary *.bin Macintosh Binärdateien
application/x-mif *.mif FrameMaker Interchange Format Dateien
application/x-netcdf *.nc *.cdf Unidata CDF-Dateien
application/x-nschat *.nsc NS Chat-Dateien
application/x-sh *.sh Bourne Shellscript-Dateien
application/x-shar *.shar Shell-Archiv-Dateien
application/x-shockwave-flash *.swf *.cab Flash Shockwave-Dateien
application/x-sprite *.spr *.sprite Sprite-Dateien
application/x-stuffit *.sit Stuffit-Dateien
application/x-supercard *.sca Supercard-Dateien
application/x-sv4cpio *.sv4cpio CPIO-Dateien
application/x-sv4crc *.sv4crc CPIO-Dateien mit CRC
application/x-tar *.tar tar-Archivdateien
application/x-tcl *.tcl TCL Scriptdateien
application/x-tex *.tex TEX-Dateien
application/x-texinfo *.texinfo *.texi TEXinfo-Dateien
application/x-troff *.t *.tr *.roff TROFF-Dateien (Unix)
application/x-troff-man *.man *.troff TROFF-Dateien mit MAN-Makros (Unix)
application/x-troff-me *.me *.troff TROFF-Dateien mit ME-Makros (Unix)
application/x-troff-ms *.me *.troff TROFF-Dateien mit MS-Makros (Unix)
application/x-ustar *.ustar tar-Archivdateien (Posix)
application/x-wais-source *.src WAIS Quelldateien
application/x-www-form-urlencoded HTML-Formulardaten an CGI
application/zip *.zip ZIP-Archivdateien
audio/basic *.au *.snd Sound-Dateien
audio/echospeech *.es Echospeed-Dateien
audio/tsplayer *.tsi TS-Player-Dateien
audio/voxware *.vox Vox-Dateien
audio/x-aiff *.aif *.aiff *.aifc AIFF-Sound-Dateien
audio/x-dspeeh *.dus *.cht Sprachdateien
audio/x-midi *.mid *.midi MIDI-Dateien
audio/x-mpeg *.mp2 MPEG-Dateien
audio/x-pn-realaudio *.ram *.ra RealAudio-Dateien
audio/x-pn-realaudio-plugin *.rpm RealAudio-Plugin-Dateien
audio/x-qt-stream *.stream -Dateien
audio/x-wav *.wav Wav-Dateien
drawing/x-dwf *.dwf Drawing-Dateien
image/cis-cod *.cod CIS-Cod-Dateien
image/cmu-raster *.ras CMU-Raster-Dateien
image/fif *.fif FIF-Dateien
image/gif *.gif GIF-Dateien
image/ief *.ief IEF-Dateien
image/jpeg *.jpeg *.jpg *.jpe JPEG-Dateien
image/tiff *.tiff *.tif TIFF-Dateien
image/vasa *.mcf Vasa-Dateien
image/vnd.wap.wbmp *.wbmp Bitmap-Dateien (WAP)
image/x-freehand *.fh4 *.fh5 *.fhc Freehand-Dateien
image/x-portable-anymap *.pnm PBM Anymap Dateien
image/x-portable-bitmap *.pbm PBM Bitmap Dateien
image/x-portable-graymap *.pgm PBM Graymap Dateien
image/x-portable-pixmap *.ppm PBM Pixmap Dateien
image/x-rgb *.rgb RGB-Dateien
image/x-windowdump *.xwd X-Windows Dump
image/x-xbitmap *.xbm XBM-Dateien
image/x-xpixmap *.xpm XPM-Dateien
message/external-body Nachricht mit externem Inhalt
message/http HTTP-Headernachricht
message/news Newsgroup-Nachricht
message/partial Nachricht mit Teilinhalt
message/rfc822 Nachricht nach RFC 1822
model/vrml *.wrl Visualisierung virtueller Welten
multipart/alternative mehrteilige Daten gemischt
multipart/byteranges mehrteilige Daten mit Byte-Angaben
multipart/digest mehrteilige Daten / Auswahl
multipart/encrypted mehrteilige Daten verschlüsselt
multipart/form-data mehrteilige Daten aus HTML-Formular (z.B. File-Upload)
multipart/mixed mehrteilige Daten gemischt
multipart/parallel mehrteilige Daten parallel
multipart/related mehrteilige Daten / verbunden
multipart/report mehrteilige Daten / Bericht
multipart/signed mehrteilige Daten / bezeichnet
multipart/voice-message mehrteilige Daten / Sprachnachricht
text/comma-separated-values *.csv komma-separierte Datendateien
text/css *.css CSS Stylesheet-Dateien
text/html *.htm *.html *.shtml -Dateien
text/javascript *.js JavaScript-Dateien
text/plain *.txt reine Textdateien
text/richtext *.rtx Richtext-Dateien
text/rtf *.rtf Microsoft RTF-Dateien
text/tab-separated-values *.tsv tabulator-separierte Datendateien
text/vnd.wap.wml *.wml WML-Dateien (WAP)
application/vnd.wap.wmlc *.wmlc WMLC-Dateien (WAP)
text/vnd.wap.wmlscript *.wmls WML-Scriptdateien (WAP)
application/vnd.wap.wmlscriptc *.wmlsc WML-Script-C-dateien (WAP)
text/xml-external-parsed-entity extern geparste XML-Dateien
text/x-setext *.etx SeText-Dateien
text/x-sgml *.sgm *.sgml SGML-Dateien
text/x-speech *.talk *.spc Speech-Dateien
video/mpeg *.mpeg *.mpg *.mpe MPEG-Dateien
video/quicktime *.qt *.mov Quicktime-Dateien
video/vnd.vivo *viv *.vivo Vivo-Dateien
video/x-msvideo *.avi Microsoft AVI-Dateien
video/x-sgi-movie *.movie Movie-Dateien
workbook/formulaone *.vts *.vtts FormulaOne-Dateien
x-world/x-3dmf *.3dmf *.3dm *.qd3d *.qd3 3DMF-Dateien
x-world/x-vrml *.wrl VRML-Dateien



英明 2007-03-17 12:28 发表评论
]]>
关于Motorola J2ME开发的几个l节问题http://www.aygfsteel.com/wiser/archive/2007/03/16/104317.html英明英明Fri, 16 Mar 2007 09:38:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/16/104317.htmlhttp://www.aygfsteel.com/wiser/comments/104317.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/16/104317.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104317.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104317.html

[转蝲于cnjm]

http://www.cnjm.net/tech/article960.html


在实际开发MOTO的品的时候,会遇C些细节问题。很烦hQ但是往往隑ֈ不少人。下面就是我从自己实际开发经历中获得的一些问题的解决?br />1. Motorola Vpd的J2ME的图标显C?br />Motorola的Vpd手机j2meE序图标大小必须?5*15的大?而且必须在MIDlet-Icon中填出图标名?不能只在MIDlet-1中填?Nokia的手机的只填写q里可以了.

2. 存储I间的限刉?br />Motorola的手机的RMS存储I间如果不在MIDlet-Data-Size中具体给?那么默认的就只有8Kq是12K,我记不清楚了。所以,必须再MIDlet-Data-Size中给出具体的RMS需要大。一般MOTO的手机,最大支?4K的RMSI间?br />3.Motorola的网l下载问?br />在中国卖的MOTO的手机,|络q接炚w是默认固定到CMWAP上的。所以,一般的J2ME|络q接的方法,是无法通过CMWAP的网关的。解决的办法有两个?br />1Q更ҎZ的连接点。其实你只要自己随便建立一个新的连接点Q什么信息都不用填写Q然后将默认的连接点讄在上面,它就可以自动成ؓCMNETq接炏V那么一般的J2ME|络讉K方式可以了?br />2Q采用CMWAP的连接方式。这个就要求E序上有所改动了?br />比如我要下蝲q样一个数据文? http://211.136.87.234/1.png
那么其代码方式就?
c= (HttpConnection)Connector.open("http://10.0.0.172:80/1.png,Connector.READ,true);
c.setRequestProperty("X-Online-Host", "211.136.87.234");
c.setRequestProperty("Accept", "*/*");
is = c.openInputStream();
10.0.0.172是移动的CMWAP|关?

4.使用WTK104打包的时候没有MIDP2.0的支?

Ud的百宝箱的测试的时候,最好用WTK打包Q这PCLASS文g调用的API最U净。但是MOTO的手机大部分都是MIDP2.0的,而WTK104只支持MIDP1.0。打包的时候会出现错误?br />解决的办法和NOKIA的一栗手动把几个MIDP2.0的API加到WTK里面的lib\midpapi.zip和wtklib\emptyapi.zip里面。用WinRar软gQ直接从MOTO的SDK中,拖进d可以了?/p>

英明 2007-03-16 17:38 发表评论
]]>
转脓Q关于CMNETQCNWAP的J2ME联网方式http://www.aygfsteel.com/wiser/archive/2007/03/16/104316.html英明英明Fri, 16 Mar 2007 09:34:00 GMThttp://www.aygfsteel.com/wiser/archive/2007/03/16/104316.htmlhttp://www.aygfsteel.com/wiser/comments/104316.htmlhttp://www.aygfsteel.com/wiser/archive/2007/03/16/104316.html#Feedback0http://www.aygfsteel.com/wiser/comments/commentRss/104316.htmlhttp://www.aygfsteel.com/wiser/services/trackbacks/104316.html

原作Q?a >http://www.javaeye.com/topic/44418     作者:wuhua

在j2medev上见C关?a >CMNET和CMWAP|络q接。 ?现在我根据我的实际经验ȝ下它们?br />1。CMNETQ这个就不用怎么样介l了Q跟电脑上Internet没什么区别?br />直接用这个这L代码Ok?

java 代码

  1. try {  
  2.              http = (HttpConnection) Connector.open(url);  
  3.         } catch (IOException e) {  
  4.             e.printStackTrace();  
  5. }  

2。CNWAPQ这个我的实늻果根|上的很多介l不同。看下面q段文字。下面摘自?a >在J2ME中用CNWAP接入点联|?/a>

都是中国Ud搞出来的事情?

所以对于特定的一些机型,普通的直接联网方式会出现连不上|络Q这是因Z的手备不支持CMNET的联|方式。也怽会发Cl过修改Q直接连接的方式也可以在一些cnwap的设备上Q只支持cnwap的多Z端机Q运行,q个是因备上应中国一定的要求Q在pȝ底层q行了{换,如果没有转换的话Q就必须你自己手动在代码里面昑ּ的来转换了?

q里我只打算l出一些示意代码,用来辅助说明解决问题的方?

假设你原来要h的页面是Qhtpp://www.testwap.com/test/try.jsp

那么你会用这句话q接

HttpConnection httpConnection = (HttpConnection)Connector.open(“http://www.testwap.com/test/try.jsp?;

但是Z转成CNWAP的联|Ş?你必这么写

HttpConnection httpConnection = (HttpConnection)Connector.open(“http://10.0.0.172:80/test/try.jsp?;

接着再写

httpConnection.setRequestProperty("X-Online-Hostwww.testwap.com");
httpConnection.setRequestProperty("Accept","*/*"); 

q样ok?

不过q个Ҏ在模拟器上没办法试Q因为模拟器Ud|关不让你进啊,所以写代码的时候用cmnet的正式发布的时候改成cnwap的。很ȝ
代码?

java 代码

  1. http =(HttpConnection)Connector.open("http://10.0.0.172:80/"+url,Connector.READ,true);  
  2.      c.setRequestProperty("X-Online-Host",ServerName);  
  3.      c.setRequestProperty("Accept", "*/*");  

上面的代码CMNET我试q,因ؓ我那个球项目需要采用ScoketQ确实是只有CMNET能打开Socket?br />W二U,我却意外发现Q我开发WapExporerq行试的时候,我没有采用代理,也可以获取连接?br />分析有以下几U可能?br />1.Ud那边可能对于CMNET来说Q几乎是Ҏ有的协议q行开放。比如(SocketQHttpQ跟所有端口?br />2.对于CNWAPQ我估计只开放http协议以及80端口Q其他的都封闭,也就是CNWAP只能讉Khttp协议?br />   ׃我测试的IP地址q行试Q所以它可以直接扑ֈ。对于非IP地址我没试果。也许CNWAP不能解释域名也说不定Q这Ҏ׃清楚了?/p>

英明 2007-03-16 17:34 发表评论
]]>
վ֩ģ壺 | Ͻ| üɽ| տ| ȳ| ǹ| ƽ| ƽɽ| н| | ƽ| | | | | ƽ| DZ| | | ɫ| ͨ| | | Ȩ| | | | ¡| | ½| | ֿ| | üɽ| | | | Ҵ| ڳ| | |