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

📄 threadlistsubs.java

📁 J2me应用开发经典例子
💻 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 + -