⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendardownloadform.java

📁 J2ME MIDP 2.0 无线设备编程的一些源码
💻 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 + -