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

📄 threadgetitems.java

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