📄 httpdataagent.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.io.* ;
import java.io.*;
import java.util.Vector;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
public class HttpDataAgent {
final int USE_ENV_DEV=0; //* 用于开发(直接走互联网,不经过中移动)
final int USE_ENV_WORK=1; //* 用于实际应用(经过中移动)
int m_useEnv = USE_ENV_DEV;
//int m_useEnv = USE_ENV_WORK;
String m_strMsg;
String m_strUrl;
String m_strParam;
String m_strFullCtnt; //* 页面的全部数据
private int m_iCurrIdx;///
private int m_iEndIdx;///
Jianhuaban m_mp;
Displayable m_disOrg;
Displayable m_disNext;
Reloadable m_objReload;
OutputStream os;
InputStreamReader din;
ProcWaitWnd m_pww;
public int m_iRecCount;
BgTask m_bkTask;
private Container container;
public static int lenghtMeetRecollect=0;
public static int lenghtPic1=0; //方便反序列化时使用
public static int lenghtPic2=0;
public static int lenghtPic3=0;
public HttpDataAgent(Jianhuaban mp) {
m_mp = mp;
m_pww = ProcWaitWnd.getInstance();
}
// 打开连接并获取数据
public void DownData( String strUrl, String strParam, Displayable disNext, Reloadable objReload,Container con){
container=con;
m_strUrl = strUrl;
m_strParam = strParam;
m_strFullCtnt = "";
m_disOrg = m_mp.getDisplay().getCurrent();
m_disNext=disNext;
m_objReload = objReload;
m_bkTask = new BgTask((ProcObserver)m_pww,m_disOrg,disNext,m_mp.getDisplay()){
public boolean runTask() {
try{
int ic;
HttpConnection hc;
byte []ba;
m_pww.autoUpdProg();
if( m_useEnv == USE_ENV_WORK ){
hc = (HttpConnection) Connector.open("http://192.168.1.21/"+m_strUrl,Connector.READ_WRITE,true);
hc.setRequestProperty("X-Online-Host", "www.medipromos.com");
}else{
hc = (HttpConnection) Connector.open("http://192.168.1.21/"+m_strUrl,Connector.READ_WRITE,true);
}
hc.setRequestMethod(HttpConnection.POST);
hc.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0" );
hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
ba=m_strParam.getBytes("UTF-8");
hc.setRequestProperty("Content-Length",Integer.toString(ba.length) );
os = hc.openOutputStream();
os.write(ba);
os.close();
if( hc.getResponseCode() != hc.HTTP_OK ){
// m_mp.alert("获取网络数据失败!");
m_bkTask.m_failTitle = "读取网络数据";
m_bkTask.m_failCtnt = "连接网络失败!";
hc.close();
return false;
}
din = new InputStreamReader(hc.openInputStream(), "UTF-8");
while( (ic = din.read()) != -1 ){
m_strFullCtnt = m_strFullCtnt + (char)ic ;
}
din.close();
//* 得到记录数量
m_iCurrIdx = m_strFullCtnt.indexOf("recCount=")+"recCount".length();
m_iEndIdx = m_strFullCtnt.indexOf(";",m_iCurrIdx);
m_iRecCount = Integer.parseInt(m_strFullCtnt.substring(m_iCurrIdx+1,m_iEndIdx));
m_iCurrIdx = m_iEndIdx+1;
if(m_strUrl.equals("newweb/wap/meetRecollect.asp")) { // 注意这边的地址有时需要更改
SortComparator sortCom=new SortComparator();
int a=0;
try{
RecordStore rs=RecordStore.openRecordStore("meetRecollect",true,RecordStore.AUTHMODE_PRIVATE,true);
if(rs.getNumRecords()>0){
RecordEnumeration re=rs.enumerateRecords(null,sortCom,true);
while(re.hasNextElement()){
// container=Container.deserializeAD(re.nextRecord());
// a=container.questionID;
}
}
rs.closeRecordStore();
}catch(Exception e){
e.printStackTrace();
}
// a为rms包内的id号码
int y=m_mp.m_hda.m_iRecCount-Num.questionNum>m_mp.m_hda.m_iRecCount-a?m_mp.m_hda.m_iRecCount-Num.questionNum:m_mp.m_hda.m_iRecCount-a;//取两者比较大的那个
//pic//
StringBuffer strTmp=new StringBuffer();
Vector picVector=new Vector();
//下边是获取pic的路径的 //
for(int j=0;j<=m_mp.m_hda.m_iRecCount;j++){
// id 返回最新的id
if( !m_mp.m_hda.GetNextFld(null,strTmp) ){
return false;
}
int ii= Integer.parseInt(strTmp.toString());
//* ctnt
if( !m_mp.m_hda.GetNextFld(null,strTmp)){
return false;
}
String str =strTmp.toString();
//下边是获取pic的路径的
//pic1
if( !m_mp.m_hda.GetNextFld(null,strTmp) ){
return false;
}
String strPic1 = strTmp.toString();
String pic1Byte=readPic(strPic1);
//pic2
if( !m_mp.m_hda.GetNextFld(null,strTmp) ){
return false;
}
String strPic2 = strTmp.toString();
String pic2Byte=readPic(strPic2);
//pic3
if( !m_mp.m_hda.GetNextFld(null,strTmp) ){
return false;
}
String strPic3 = strTmp.toString();
String pic3Byte=readPic(strPic3);
// }
saveMeetRecollect("meetRecollect",m_mp.m_hda.m_iRecCount,ii,str,pic1Byte,pic2Byte,pic3Byte) ;
}
}
if( m_iRecCount == 0 ){////
// m_objReload.Reload();
m_objReload.Reload();
m_bkTask.m_failTitle = "读取网络数据";
m_bkTask.m_failCtnt = "没有找到您要查找的数据!";
hc.close();
return false;////
}////
hc.close();
}catch(IOException ioe){
m_strMsg=ioe.getMessage();
m_objReload.Reload();
m_bkTask.m_failTitle = "读取网络数据";
m_bkTask.m_failCtnt = "获取网络数据时发生异常!异常:"+m_strMsg;//启动loadAD和loadMeetNotice方法就抛出这个异常,晋注释
return false;
}
m_objReload.Reload();
return true;
}
public void cancel() {
}
};
BgTask.runWithProgressGauge(m_bkTask, "正在从网络读取数据","请稍候...", false, m_mp.getDisplay());
}
//* 得到下一个字段的内容
public boolean GetNextFld(StringBuffer strFldName,StringBuffer strFldVal){
int iIdx;
int iFldLen;
String strFldLen;
m_iEndIdx = m_strFullCtnt.indexOf("=",m_iCurrIdx);
if( m_iEndIdx == -1 ){//* 没有内容了
return false;
}
iIdx = m_strFullCtnt.indexOf(",",m_iCurrIdx);//* 记录字段名后面逗号的位置
if( iIdx == -1 ){
return false;
}
//* 记录字段名
if( strFldName != null ){//* 需要字段名,格式:newstime,9=2006-11-2
strFldName.delete(0,strFldName.length());
strFldName.append(m_strFullCtnt.substring(m_iCurrIdx,iIdx));
}
if( m_iEndIdx == m_strFullCtnt.length()-1 ){//* 这是最后一个字段,且该字段没有内容
return true;
}
//得到当前字段的长度
strFldLen = m_strFullCtnt.substring(iIdx+1,m_iEndIdx);
if( strFldLen.length() == 0 ){ //* 没有指定当前字段的长度
m_iCurrIdx = m_iEndIdx+1;
strFldVal.delete(0,strFldVal.length());
return true;
}
iFldLen = Integer.parseInt(strFldLen);
if( iFldLen < 0 ){ // 错误的字段长度
return false;
}
strFldVal.delete(0,strFldVal.length());
strFldVal.append( m_strFullCtnt.substring(m_iEndIdx+1,m_iEndIdx+1+iFldLen) );
m_iCurrIdx = m_iEndIdx+1+iFldLen;
return true;
}
/////////////////////////////////////
private String readPic(final String UIL){
String path=UIL.substring(0);
int ic=0;
Image image=null;
HttpConnection hc=null;
InputStream is=null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] imageData = null; //自己写的
int ch=0;
try{
hc=(HttpConnection)Connector.open("http://192.168.1.21/"+path);
is = hc.openInputStream();//
while( (ch = is.read()) != -1 ){
baos.write(ch); // 读取网络图片
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(is!=null){
is.close();
}
if(hc!=null){
hc.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
// imageData = baos.toByteArray();// 把图片转换成字节
//String str=baos.toString();
//image = Image.createImage(imageData, 0, imageData.length);//在此工程中,不需要读取图片的显示
return baos.toString();
}
//保存这个会议的回顾
private void saveMeetRecollect( String fileName,int num,int id,String str, String pic1, String pic2, String pic3){
lenghtMeetRecollect=str.length();
lenghtPic1=pic1.length();
lenghtPic1=pic2.length();
lenghtPic1=pic3.length();
String meetRecollect=""+id+str+pic1+pic2+pic3;
container.setPic1(pic1);
container.setPic2(pic2);
container.setPic3(pic3);
/*
// DataSave ds=new DataSave(fileName);
//ds.addTheStore(container.getMeetRecollect(),container);
int j=ds.getCurrentID();
StringBuffer sb=new StringBuffer();
if(ds.getNum()==0||id<=Num.picNum){
for(int m=0;m<id;m++){
for(int i=1;i<id;i++){
ds.addTheStore(fileName,container);
}
}
if(ds.getNum()!=0&&id>Num.picNum){
for(int i=id-num+j+1;i<=id;i++){
ds.addTheStore(fileName,container);
}
for(int i=id-num+1;i<id-num+j;i++){
// ds.setTheData(fileName,container);
}
}
if(ds.getNum()!=0&&id >num){
for(int i=id-num+1;i<=id;i++){
// ds.setTheData(fileName,container);
}
}
}
*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -