📄 threadlistsubs.java
字号:
/*///////////////////////////////////////////////////////////////////////////////
//bloglinesMobileBuddy文档生成日期:2005.12.24
//
//(1)概述:
//类名称:ThreadLisSubs
//类说明:
// 起一个线程,向bloglines api发起请求,查询用户帐户的blog订阅源情况。
//所在子系统: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 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.menu.MenuPage;
import com.ultrapower.gui.menu.PageItem;
import com.ultrapower.gui.popup.Popup;
/**********************************************************
//ThreadLisSubs
//
//Class Description:
// 起一个线程,向bloglines api发起请求,查询用户帐户的blog订阅源情况
//
//Author:
// zhengyun@ultrapower 2005.12.24
//
**********************************************************/
public class ThreadListSubs
implements Runnable {
// 利用这个标志控制何时退出
private boolean m_bRunIt;
private boolean m_bRunAnyway;
private MenuPage m_page;
private MenuCanvas m_canvas;
public ThreadListSubs(MenuPage page, MenuCanvas canvas)
{
System.out.println("/** Enter ThreadListSubs Constructor!");
m_page = page;
m_canvas = canvas;
m_bRunIt = true;
m_bRunAnyway = true;
}
/*
* 通知线程不去查询了
*/
public synchronized void notifyStop()
{
m_bRunIt = false;
}
/*
* 通知线程退出
*/
public synchronized void notifyCloseThread()
{
m_bRunIt = false;
m_bRunAnyway = false;
}
/*
* 通知线程去查询用户订阅源信息
*/
public synchronized void notifyListSubs()
{
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;
try
{
/**
* 如果在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_LISTSUBS));
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:对应的密码
* begin&end:由于手机用户一次无法显示过多的blog订阅源,所以我们只能通过这两个参数选择传给手机用户的
* blog订阅源范围,比如从第1个到第10个。
*/
request.addProperty("usermail",
usermail);
request.addProperty("password",
password);
request.addProperty("begin",
"1");
request.addProperty("end",
"11");
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!");
m_canvas.m_subs = SerializeSubs.deserialize(by);
System.out.println("/~~ 你还有多少没有读呢:" + m_canvas.m_subs.m_unreadcount);
for(int nSub = 0;nSub < m_canvas.m_subs.m_subs.size();nSub++)
{
SerializeSub sub = (SerializeSub)m_canvas.m_subs.m_subs.elementAt(nSub);
String sTitle =
sub.title + "[" + sub.unread + "]";
m_page.addItem(
new PageItem(sTitle.toCharArray(), null, m_canvas, null,
MenuCanvas.ACTION_LOCAL_READBLOGITEMS));
}
m_canvas.getMenu().gotoPage(m_page);
}
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();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -