📄 threadgetitems.java
字号:
/*///////////////////////////////////////////////////////////////////////////////
//bloglinesMobileBuddy文档生成日期:2005.12.24
//
//(1)概述:
//类名称:ThreadGetItems
//类说明:
// 起一个线程,向bloglines api发起请求,检索某个特定订阅的博客登录条目。
//所在子系统:bloglinesMobileBuddy
//
//系统总描述:
我们提供的bloglines Mobile Buddy J2ME版本 就是这么一种概念:
一个可以下载到手机(例如Nokia7610已经确实可以下载安装并运行)的Java应用程序。
子系统描述:
下面介绍bloglines Mobile Buddy的功能列表:
配置Bloglines帐户信息
My Feeds
系统设置
关于
退出
//(2)历史记录:
//创建人: 郑昀(2005.12.24)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs: http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc
//(3)版权声明:
//我这个版本的j2me客户端代码受GPL协议保护,允许您自由修改,但不得用于商业用途,除非得到本人的授权。
//(4)相关资源:
1:《[J2ME]Bloglines手机伴侣 开源说明》
2: 下载手机客户端:
3:下载源代码:
////////////////////////////////////////////////////////////////////*/
package com.ultrapower.model;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import javax.microedition.lcdui.Display;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.MarshalBase64;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
import com.ultrapower.Bloglines;
import com.ultrapower.Resources;
import com.ultrapower.RmsFacade;
import com.ultrapower.gui.MenuCanvas;
import com.ultrapower.gui.popup.Popup;
/**********************************************************
//ThreadGetItems
//
//Class Description:
// 起一个线程,向bloglines api发起请求,检索某个特定订阅的博客登录条目
//
//Author:
// zhengyun@ultrapower 2005.12.25
//
**********************************************************/
public class ThreadGetItems
implements Runnable {
// 利用这个标志控制何时退出
private boolean m_bRunIt;
private boolean m_bRunAnyway;
private Display m_display;
private MenuCanvas m_canvas;
private String m_subId;
public ThreadGetItems(String subid, Display display, MenuCanvas canvas)
{
System.out.println("/** Enter ThreadGetItems Constructor>>" +
subid);
m_display = display;
m_canvas = canvas;
m_subId = subid;
m_bRunIt = true;
m_bRunAnyway = true;
System.out.println("/* 1");
}
/*
* 设置blog订阅号
*/
public void setSubId(String subid)
{
m_subId = subid;
}
/*
* 通知线程不去查询了
*/
public synchronized void notifyStop()
{
m_bRunIt = false;
}
/*
* 通知线程退出
*/
public synchronized void notifyCloseThread()
{
m_bRunIt = false;
m_bRunAnyway = false;
}
/*
* 通知线程去检索某个特定订阅的博客登录条目
*/
public synchronized void notifyGetItems()
{
m_bRunIt = true;
}
public final void run()
{
/* Use networking if necessary */
long lngStart;
long lngTimeTaken;
while(m_bRunAnyway)
{
try
{
// 我们是依靠 m_bRunIt 来判断是否去查询的.
// 如果当前 m_bRunIt 是false,那么本线程就只能先睡眠一段时间了.
if( m_bRunIt )
{
System.out.println("/* Start query!");
String strError = "";
boolean bHasException = false;
String blogitems = "";
try
{
if(m_subId.length() > 1)
{
/**
* 如果在RMS中找到了用户的登录电子邮件地址名和密码,就利用他们来登录bloglines
* zhengyun added 20051227
*/
String usermail = Bloglines.hasSavedUserMail();
String password = Bloglines.hasSavedUserPassword();
/*
* Change to run locally on developer machine
*/
String serviceNamespace=
String.valueOf(
Resources.getChars(
Resources.TXT_P_WS_NAMESPACE));
String methodName =
String.valueOf(
Resources.getChars(
Resources.TXT_P_WS_METHOD_GETITEMS));
String serviceUrl =
serviceNamespace + "?wsdl";
System.out.println("Try new SoapObject");
SoapObject request = new SoapObject(serviceNamespace, methodName );
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
new MarshalBase64().register(envelope);
/*
* 添加 web service的输入参数
* usermail:bloglines需要一个用户帐户的邮件地址
* password:对应的密码
* subid:BloglinesSubId,从 listsubs 函数的 OPML 解析而来,
* 可能是馈送档案或数据夹的订阅 ID。如果是数据夹的订阅 ID,便会考虑该数据夹中的所有订阅。如果是 s=0,那么会考虑使用者的所有订阅。。
* topcount:为了避免手机接收到过多的数据,还是制定一个最大的文章数目
*/
request.addProperty("usermail",
usermail);
request.addProperty("password",
password);
request.addProperty("subid",
m_subId);
request.addProperty("topcount",
"5");
System.out.println("/* Try new HttpTransport \n" +
" serviceUrl:" + serviceUrl + " ;method:" + methodName);
HttpTransport tx = new HttpTransport(serviceNamespace);
/*
* 按照用户设置的,看走不走代理.
* 当然,如果用户根本就没设置过,那么就是false,也就是不走代理
* zhengyun added 20051230
*/
tx.setProxy(RmsFacade.getBoolean(Bloglines.PROXY_CMWAP));
tx.debug = true;
System.out.println("Begin call with:user=" + usermail
+ ";password=" + password);
tx.call(null, envelope);
Object Response = envelope.getResult();
/*
* 必要时打印出tx.responseDump来观察soap是否正确工作
*/
System.out.println("Response dump>>"
+ tx.responseDump);
byte[] by = (byte[])Response;
System.out.println("succ convert!");
blogitems = deserialize(by);
}
else
{
blogitems = "抱歉,没有找到相应的blog订阅号,无法提供此项服务。";
}
/*
* 将blog文章内容全部用弹出对话框来展示
*/
Bloglines.showPopup(m_display,
blogitems.toCharArray(), Popup.ALT_OK, 0, 0, 0, null);
}
catch(Exception exc)
{
bHasException = true;
exc.printStackTrace();
strError =
"Exception:"
+ exc.getMessage() +
"/" + exc.getClass();
}
if(bHasException == true)
{
////////////////////////////////////////////
// 告诉控制器出错了
Bloglines.showPopup(m_canvas.getDisplay(),
strError.toCharArray(), Popup.ALT_OK, 0, 0, 0, null);
////////////////////////////////////////////
}
m_bRunIt = false;
}
lngStart = System.currentTimeMillis();
lngTimeTaken = System.currentTimeMillis() - lngStart;
if(lngTimeTaken < 100)
Thread.sleep(75 - lngTimeTaken);
}
catch(Exception exc)
{
System.out.println("/**发生异常!");
m_bRunIt = false;
exc.printStackTrace();
}
}
}
/*
* 将byte[]数组反序列化为字符串的函数
*/
private synchronized String deserialize(byte[] data){
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
String response = "";
try
{
response = dis.readUTF();
bais.close();
dis.close();
}
catch(Exception exc)
{
exc.printStackTrace();
}
return response;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -