📄 calendardownloadform.java
字号:
//CalendarDownloadForm.java
//作为日程记录下载的界面窗口,并通过HTTP下载数据
package calendar;
import javax.microedition.lcdui.*;
import java.util.*;
import java.lang.*;
import java.io.*;
import javax.microedition.io.*;
public class CalendarDownloadForm extends Form
{
public static Command okCmd = new Command("Save", Command.SCREEN, 1);
public static Command exitCmd = new Command("Failed", Command.SCREEN, 1);
public static Command cancelCmd = new Command("Cancel", Command.EXIT, 1);
private StringItem strMsg = null;
public Vector array = null;
Calendar dateCurrent = null;
//构造器
public CalendarDownloadForm(String url,Calendar date)
{
super("Download");
append(url);
dateCurrent = Calendar.getInstance();
dateCurrent.setTime(date.getTime());
strMsg = new StringItem("Msg","Downloading ... ");
append(strMsg);
setTicker(new Ticker("Downloading ..."));
Downloader d = new Downloader(this,url);
}
//当线程完成下载后通知窗口,success 表示下载是否成功
public void setFinished(boolean success, String msg)
{
strMsg.setText(msg);
setTicker(null);
if(success)
{
strMsg.setLabel("OK");
addCommand(okCmd);
addCommand(cancelCmd);
}
else
{
strMsg.setLabel("Error");
addCommand(exitCmd);
}
}
//下载日程记录的线程类
protected class Downloader extends Thread
{
private String url, errMsg;
private CalendarDownloadForm form;
public Downloader(CalendarDownloadForm f,String u)
{
url = u;
form = f;
this.start();
}
public void run()
{
try
{
String result = getUnicodeString(url);
if(result ==null) //下载失败
form.setFinished(false, errMsg);
else //分解字符串获取每条日程记录
{
splitResult(result);
if(array ==null)
form.setFinished(true, "Download successful! No item found");
else
form.setFinished(true, "Download successful! "+ array.size() +" items found!");
}
}
catch(Exception e)
{
form.setFinished(false,e.getMessage());
}
}
//将下载的内容分解为日程记录信息
protected void splitResult(String str)
{
int[ ] pos = new int[3];
int lastIdx = 0;
int foundIdx = 0;
try
{
while(lastIdx < str.length())
{
if('\n' == str.charAt(lastIdx) || '\r'== str.charAt(lastIdx))
{
lastIdx++;
continue;
}
foundIdx = str.indexOf('\n',lastIdx);
if(foundIdx <0)
break;
String line=str.substring(lastIdx,foundIdx -1);
splitLine(line);
lastIdx = foundIdx+1;
}
}
catch(Exception e)
{ System.out.println("splitResult error ="+e.getMessage()); }
pos = null;
}
protected void splitLine(String str)
{
int idx1 = str.indexOf('|',0);
int idx2 = str.indexOf('|',idx1+1);
int idx3 = str.indexOf('|',idx2+1);
String s1 = str.substring(0,idx1);
String s2_1 = str.substring(idx1+1,idx1+1+2);
String s2_2 = str.substring(idx1+1+2,idx1+1+2+2);
String s3 = str.substring(idx2+1,idx3);
String s4 = str.substring(idx3+1);
//创建新的日程记录对象
ScheduleItem item = new ScheduleItem();
int hour = Integer.valueOf(s2_1).intValue();
if(hour>=12)
{
hour -= 12;
dateCurrent.set(Calendar.AM_PM, Calendar.PM);
}
else
dateCurrent.set(Calendar.AM_PM, Calendar.AM);
dateCurrent.set(Calendar.HOUR,hour);
dateCurrent.set(Calendar.MINUTE,Integer.valueOf(s2_2).intValue());
item.set(s3,Integer.valueOf(s1).intValue(),dateCurrent.getTime(),s4);
if(array ==null)
array = new Vector();
array.addElement(item);
}
public String getUnicodeString(String url) throws IOException ,Exception
{//通过 HttpConnection 对象来获取网页内容
HttpConnection c = null;
InputStream is = null;
DataInputStream dis = null;
String str=null;
try
{
c = (HttpConnection)Connector.open(url); //创建 HttpConnection 对象
c.setRequestProperty("User-Agent","MIDP/2.0");//设置客户方名称
c.setRequestProperty("Accept","text/html, text/plain, text/xml, image/png, */*");//设置可接受的MIME类型
int rc = c.getResponseCode(); //转换到Connected 状态
if( rc != HttpConnection.HTTP_OK)
{
throw new Exception(c.getResponseMessage());
}
is = c.openInputStream();//打开输入流
dis = new DataInputStream(is);
char ch = dis.readChar();//丢弃文件的第一个Unicode 字符
boolean unicodeBig = true;
if(ch !='\uFEFF') //判断是否为 Unicode Big endian 编码方式
unicodeBig = false;
StringBuffer sb = new StringBuffer();
int bHigh,bLow;
while(dis.available() >=2 )
{//逐个读入字符
if(! unicodeBig)
{
bHigh=dis.read();
bLow=dis.read();
ch=(char)bLow;
ch <<= 8;
ch |= bHigh;
sb.append(ch);
}
else
sb.append(dis.readChar());
}
str = sb.toString(); //得到读入的字符串
sb = null;
}
catch (IOException e)
{
errMsg = e.getMessage();
System.out.println("error = "+errMsg);
}
finally
{
if (dis != null)
dis.close();
if (is != null)
is.close();
if (c != null)
c.close();
}
return str;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -