📄 kbaostock.java
字号:
/*
版权声明
本程序作者是 www.kbao.com 保留所有权利
我们对于本软件不作任何保证, 不管是明确的表达还是隐含的推论.
本软件可用于任何目的, 包括商业目的, 我们不作任何限制和不承担任何责任.
再分发本程序或者它的修改程序, 请保留本版权声明
如果你对于本软件有任何修改,你可以访问我们的网站相关页面
http://www.kbao.com/bbsite/bbsn/bbsview.php?bbsid=StockDev
并将新的程序上传. 我们将非常欢迎和尊重你的努力.
*/
/*
正好证券 Web 服务器是证券信息专用服务器软件, 广泛用于证券行情和资讯传播,
详细介绍见 http://www.kbao.com
J2ME 扩展服务是正好证券 Web 服务器的一个扩展服务程序, 它提供了适合于 J2ME 程序
使用的股票行情查询. 部分功能如下: 以 http://www.kbao.com:1680 为例
最新行情 utf-8 编码
http://www.kbao.com:1680/j2me/bidst/SH600000
内容格式: ( 以 \t 分隔数据项 以 \r\n 结束 )
代码 名称 时间 前收 开 高 低 新 量 额 买1价 买1量 卖1价 卖1量 买2价 买2量 卖2价 卖2量 买3价 买3量 卖3价 卖3量
最新行情 png 图像
http://www.kbao.com:1680/j2me/bidsp/SH600000?scale=160_190
今日分时走势 png 图像
http://www.kbao.com:1680/j2me/mins/SH600000?scale=160_190&mask=cvy
K 线图 png 图像
http://www.kbao.com:1680/j2me/kdays/SH600000?scale=160_190&mask=cvy&ktype=10001
排行榜 utf-8 编码
http://www.kbao.com:1680/j2me/xlist/SHA?sort=1
参数说明
scale 图像规格 格式: scale=宽_高 可以根据机型调整,或者置于属性文件中.
mask 画图选项 c-标题 v-成交量 y-刻度
ktype K线周期 10001-日线 10002-周线 10003-月线 10004-年线
20001-5分钟 20002-15分钟 20003-30分钟 20004-60分钟
sort 排序 1-价格 2-涨幅 3-成交 4-振幅 (-1 -2 -3 )-反序
*/
package kbaohttpstock ;
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
public class KbaoStock extends MIDlet implements CommandListener, HttpDataListener
{
private Command ok_cmd = new Command("确认", Command.OK, 1);
private Command cancel_cmd= new Command("放弃", Command.CANCEL, 1);
private Command enter_cmd = new Command("进入", Command.OK, 1);
private Command exit_cmd = new Command("退出", Command.EXIT, 1);
private Command back_cmd = new Command("返回", Command.BACK, 1);
private Command fresh_cmd = new Command("刷新", Command.ITEM, 2);
private Command select_cmd = new Command("增加到自选股", Command.ITEM, 2);
private Command addnew_cmd = new Command("增加", Command.ITEM, 2);
private Command delete_cmd = new Command("删除", Command.ITEM, 2);
private Command clear_cmd = new Command("删除全部", Command.ITEM, 2);
private Command move_first_cmd = new Command("移到最前", Command.ITEM, 2);
private Command move_last_cmd = new Command("移到最后", Command.ITEM, 2);
private Command move_up_cmd = new Command("移到前面", Command.ITEM, 2);
private Command move_down_cmd = new Command("移到后面", Command.ITEM, 2);
// 正好证券 Web 服务器 并附加 j2me 扩展服务
private String host="www.kbao.com:1680"; // 中国K报
private String j2me;//="http://www.kbao.com:1680/j2me"; // 中国K报
private String mask ;
private String scale ;
private String scale_bidsp ;
private String stocklist_rms ="KbaoStockList";
private List startlist ;
private List stocklist ;
private List opslist ;
private List marklist ;
private List sortypes ;
private List toplist ;
private Form editform ;
private TextField editext ;
private Form cfgform ;
private TextField cfgtext ;
private Form dataform ;
private String url ;
private String info_url ;
private Displayable[] display_stack;
private int display_stackp;
private Display display;
private Image icon_box ;
private Image icon_cfg ;
private Image icon_stk ;
private Image icon_stka ;
private Image icon_bids ;
private Image icon_mins ;
private Image icon_kday ;
String top_market[]={ "sha","上证 A股",
"shb","上证 B股",
"shf","上证基金",
"shc","上证债券",
"sza","深证 A股",
"szb","深证 B股",
"szf","深证基金",
"szc","深证债券"
};
String sort_types[]={"2","-2","4","3"};
int width, height ;
public KbaoStock()
{
try
{
icon_box = Image.createImage( "/box.png" );
icon_cfg = Image.createImage( "/cfg.png" );
icon_stk = Image.createImage( "/stk.png" );
icon_stka = Image.createImage( "/stk.png" );
icon_bids = Image.createImage( "/bids.png" );
icon_mins = Image.createImage( "/mins.png" );
icon_kday = Image.createImage( "/kday.png" );
}
catch( IOException e )
{
//System.out.println("没找到图像文件");
}
//开始
startlist = new List( "正好股票", List.IMPLICIT );
startlist.setCommandListener( this );
startlist.addCommand( enter_cmd );
startlist.addCommand( exit_cmd );
startlist.append( "自选股", icon_box );
startlist.append( "排行榜", icon_box );
startlist.append( "设 置", icon_cfg );
//自选股
stocklist = new List( "自选股", List.IMPLICIT );
stocklist.setCommandListener( this );
stocklist.addCommand( enter_cmd );
stocklist.addCommand( back_cmd );
stocklist.addCommand( addnew_cmd );
stocklist.addCommand( delete_cmd );
stocklist.addCommand( clear_cmd );
stocklist.addCommand( move_first_cmd );
stocklist.addCommand( move_last_cmd );
stocklist.addCommand( move_up_cmd );
stocklist.addCommand( move_down_cmd );
//个股
opslist = new List("600888 正好股份", List.IMPLICIT );
opslist.setCommandListener( this );
opslist.addCommand( enter_cmd );
opslist.addCommand( back_cmd );
opslist.append( "最新行情", icon_bids );
opslist.append( "今日走势", icon_mins );
opslist.append( "日 K 线", icon_kday );
opslist.append( "周 K 线", icon_kday );
opslist.append( "月 K 线", icon_kday );
opslist.append( "年 K 线", icon_kday );
opslist.append( "5 分钟线", icon_kday );
opslist.append( "15分钟线", icon_kday );
opslist.append( "30分钟线", icon_kday );
opslist.append( "60分钟线", icon_kday );
//排行榜 市场
marklist = new List( "排行榜", List.IMPLICIT );
marklist.setCommandListener( this );
marklist.addCommand( enter_cmd );
marklist.addCommand( back_cmd );
for( int i=0; i<8; i++ )
marklist.append( top_market[i*2+1], icon_box );
//排行榜 类型
sortypes = new List( "上证A股 排行榜", List.IMPLICIT );
sortypes.setCommandListener( this );
sortypes.addCommand( enter_cmd );
sortypes.addCommand( back_cmd );
sortypes.append( "涨幅", icon_box );
sortypes.append( "跌幅", icon_box );
sortypes.append( "振幅", icon_box );
sortypes.append( "成交", icon_box );
//排行榜
toplist = new List( "上证A股 涨幅", List.IMPLICIT );
toplist.setCommandListener( this );
toplist.addCommand( enter_cmd );
toplist.addCommand( back_cmd );
toplist.addCommand( select_cmd );
//股票图形
dataform = new Form( "600888 正好股份" );
dataform.setCommandListener( this );
dataform.addCommand( fresh_cmd );
dataform.addCommand( back_cmd );
//编辑
editform = new Form("输入代码");
editform.setCommandListener( this );
editext = new TextField( null, null, 30, 0 );
editform.append( editext );
editform.addCommand( ok_cmd );
editform.addCommand( cancel_cmd );
{
StringItem si = new StringItem("例如\r\n600000\r\nSH600000\r\nSH600000 浦发银行",null);
editform.append( si );
}
//设置
cfgform = new Form("设置");
cfgform.setCommandListener( this );
cfgtext = new TextField( "行情服务", null, 30, 0 );
cfgform.append( cfgtext );
cfgform.addCommand( ok_cmd );
cfgform.addCommand( cancel_cmd );
{
StringItem si = new StringItem("例如\r\nwww.kbao.com:1680\r\n202.105.135.181:1680",null);
cfgform.append( si );
}
//规划屏幕
//scale ="scale=160_190"; // 画面 宽_高
KbaoCanvas kc = new KbaoCanvas( );
width = kc.getWidth( )-2;
height = kc.getHeight( );
if( height < 100 ) height = 100 ; // 上下可移动
scale = "scale="+String.valueOf(width)+"_"+String.valueOf(height);
scale_bidsp = "scale="+String.valueOf(width)+"_240" ;
mask ="mask=v";
//if( height > 140 ) mask = mask+"c";
if( width > 100 ) mask = mask+"y";
display = Display.getDisplay(this);
// 屏幕栈
display_stackp=-1;
display_stack = new Displayable[8] ;
info_url = null ;
}
//程序开始
public void startApp()
{
read_stocklist( );
if( stocklist.size()==0 )
{
//System.out.println( "初始化列表");
stocklist.append( "SH1A0001 上证指数", icon_stk );
stocklist.append( "SZ399001 深证指数", icon_stk );
stocklist.append( "SH600000 浦发银行", icon_stk );
stocklist.append( "SZ000001 深发展A", icon_stk );
}
display.setCurrent( startlist );
display_stack[ ++display_stackp ] = startlist ;
j2me = "http://"+host+"/j2me";
}
//暂停
public void pauseApp() { }
//结束
public void destroyApp(boolean unconditional)
{
save_stocklist( );
}
//读取自选股
private void read_stocklist( )
{
RecordStore rs ;
try
{
rs = RecordStore.openRecordStore( stocklist_rms, false );
}
catch( RecordStoreException e ) { return ; }
try
{
int in = rs.getSize();
for( int i=0; i<in; i++ )
{
byte[] b = rs.getRecord( i+1 );
String s = bytes2string( b ); //new string( b, "utf8" );
if( i==0 ) host = s ;
else
stocklist.append( s, icon_stk );
}
}
catch( RecordStoreException e ){ }
finally
{
try
{
rs.closeRecordStore() ;
}
catch( RecordStoreException e ){ }
}
//System.out.println( "数据库 正常开始");
}
//保存自选股
private void save_stocklist( )
{
RecordStore rs ;
try
{
RecordStore.deleteRecordStore( stocklist_rms );
}
catch( RecordStoreException e ){ }
int in = stocklist.size( );
try
{
rs = RecordStore.openRecordStore( stocklist_rms, true );
}
catch( RecordStoreException e ) { return ; }
try
{
{
String s = host;
byte[] b = string2bytes( s ) ; // s.getBytes( "utf8" );
rs.addRecord( b, 0, b.length ) ;
}
for( int i=0; i<in; i++ )
{
String s = stocklist.getString( i );
byte[] b = string2bytes( s ) ; // s.getBytes( "utf8" );
rs.addRecord( b, 0, b.length ) ;
}
}
catch( RecordStoreException e ){ }
finally
{
try
{
rs.closeRecordStore() ;
}
catch( RecordStoreException e ){ }
}
//System.out.println( "数据库 正常结束");
}
//命令操作
public void commandAction(Command c, Displayable s)
{
//开始
if( s == startlist )
{
if ( c == exit_cmd )
{
destroyApp(false);
notifyDestroyed();
return ;
}
int ci = startlist.getSelectedIndex( );
if( ci == -1 ) return ;
if( c == enter_cmd || c == ((List)s).SELECT_COMMAND )
{
if( ci == 0 )
{
display.setCurrent( stocklist );
display_stack[ ++display_stackp ] = stocklist ;
}
if( ci == 1 )
{
display.setCurrent( marklist );
display_stack[ ++display_stackp ] = marklist ;
}
if( ci == 2 )
{
cfgtext.setString( host );
display.setCurrent( cfgform );
display_stack[ ++display_stackp ] = cfgform ;
}
return ;
}
return ;
}
//自选股
if( s == stocklist )
{
if( c == back_cmd )
{
display.setCurrent( display_stack[ --display_stackp ] );
return ;
}
if( c == addnew_cmd )
{
editext.setString("");
display.setCurrent( editform );
display_stack[ ++display_stackp ] = editform ;
return ;
}
int ci = stocklist.getSelectedIndex( );
if( ci == -1 ) return ;
if( c == enter_cmd || c == ((List)s).SELECT_COMMAND )
{
opslist.setTitle( stocklist.getString( ci ) );
display.setCurrent( opslist );
display_stack[ ++display_stackp ] = opslist ;
if( stocklist.getImage(ci) != icon_stka )
{
//分解代码
String st = stocklist.getString( ci ) ;
int sn = st.length() ;
int cn = 0;
for( ; cn<sn;cn++)
{
char cc = st.charAt(cn);
if( cc>='0' && cc<='9' );
else if( cc>='a' && cc<='z' );
else if( cc>='A' && cc<='Z' );
else break ;
}
if( cn < sn )
st = st.substring( 0, cn );
info_url = j2me + "/bidst/"+st;
}
return ;
}
if( c == delete_cmd )
{
stocklist.delete( ci );
return ;
}
if( c == clear_cmd )
{
while( stocklist.size( ) >0 )
stocklist.delete( 0 );
return ;
}
if( c == move_first_cmd )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -