当前位置:  编程技术>移动开发
本页文章导读:
    ▪asmack传记        asmack杂记 asmack的代码以及jar可以从 http://code.google.com/p/asmack/downloads/list 下载. 在android中创建一个service用来管理连接以及处理报文. 创建连接代码如下 ,其中server_ip是jabber服务器的ip, 可以是域.........
    ▪ new 与 alloc/init的差别        new 与 alloc/init的区别 http://blog.csdn.net/abby_sheen/article/details/7818797   英文详解:http://macresearch.org/difference-between-alloc-init-and-new 我也是转来的:http://blog.csdn.net/ch_soft/article/details/7387731 1.在实际.........
    ▪ 上传资料file控件美化       上传文件file控件美化 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-T.........

[1]asmack传记
    来源: 互联网  发布时间: 2014-02-18
asmack杂记

asmack的代码以及jar可以从 http://code.google.com/p/asmack/downloads/list 下载.

在android中创建一个service用来管理连接以及处理报文.

创建连接代码如下 ,其中server_ip是jabber服务器的ip, 可以是域名.

        Log.i(TAG, "ConnectManager in...");
        ConnectionConfiguration connConfig = new ConnectionConfiguration(server_ip);
        // connConfig.setSecurityMode(SecurityMode.disabled);
        connConfig.setSecurityMode(SecurityMode.required);
        connConfig.setSASLAuthenticationEnabled(false);
        connConfig.setCompressionEnabled(false);
        mConnection = new XMPPConnection(connConfig);

 

连接到服务器代码:

        if (!isConnect()) {
            Log.i(TAG, "Connect to server now...");
            try {
                // Connect to the server
                mConnection.connect();
                Log.i(TAG, "connect success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "connect failed!", e);
            }
        }

 

判断是否连接上:

    mConnection.isConnected();

 

登录到服务器代码, 需要用户名和密码:

        if (!isLogin()) {
            Log.i(TAG, "Login to server now...");
            try {
                mConnection.login(username, passwd);
                Log.i(TAG, "login success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "login failed!", e);
            }
        }

判断是否登录上:

     mConnection.isAuthenticated();

 

添加连接监听代码:

        mConnection.addConnectionListener(new ConnectionListener() {
            public void connectionClosed() {
                // TODO
            }

            public void connectionClosedOnError(Exception e) {
                // TODO
            }

            public void reconnectingIn(int seconds) {
                // Ignore
            }

            public void reconnectionFailed(Exception e) {
                // Ignore
            }

            public void reconnectionSuccessful() {
                // Ignore
            }
        });

 

添加包监听代码, 以名单列表为例:

      PacketFilter rosterFilter = new PacketTypeFilter(RosterPacket.class);
      mConnection.addPacketListener(new RosterPacketListener(), rosterFilter);

     其中 RosterPacket类是继承Packet类的,  除此之外还有 IQ,  Message,  Presence, AuthMechanism, Response五种类型的包.

可以使用OrFilter来同时处理多种类型的包. 以下代码用来接收所有的包:

        PacketFilter rosterPF = new PacketTypeFilter(RosterPacket.class);
        PacketFilter IQPF = new PacketTypeFilter(IQ.class);
        PacketFilter MSGPF = new PacketTypeFilter(Message.class);
        PacketFilter PresencePF = new PacketTypeFilter(Presence.class);
        PacketFilter AMPF = new PacketTypeFilter(AuthMechanism.class);
        PacketFilter REPF = new PacketTypeFilter(Response.class);
        
        OrFilter allPF = new OrFilter(rosterPF, IQPF);
        allPF.addFilter(MSGPF);
        allPF.addFilter(PresencePF);
        allPF.addFilter(AMPF);
        allPF.addFilter(REPF);
        PacketListener myListener = new PacketListener() {
            public void processPacket(Packet pk) {
                Log.i(TAG, "receive message : " + pk.toString());
            }
        };
        mConnection.addPacketListener(myListener, allPF);

 

 

以下是使用asmac过程中遇到的问题以及解决方法:

1)    java.net.SocketException: Bad address family 

解决方法, 在类中加入如下代码:

   static {
        java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
        java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
    }

 

2) java.security.KeyStoreException: KeyStore jks implementation not found

解决方法, 在创建ConnectionConfiguration 时指定证书位置及类型:

        connConfig.setTruststorePath("/system/etc/security/cacerts.bks");
        connConfig.setTruststoreType("bks");

 

 

 

 

 

 

 

 

 

 

 


    
[2] new 与 alloc/init的差别
    来源: 互联网  发布时间: 2014-02-18
new 与 alloc/init的区别

http://blog.csdn.net/abby_sheen/article/details/7818797

 

英文详解:http://macresearch.org/difference-between-alloc-init-and-new

我也是转来的:http://blog.csdn.net/ch_soft/article/details/7387731

1.在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init]
    但是并不意味着你不会接触到new,在一些代码中还是会看到[className new],
    还有去面试的时候,也很可能被问到这个问题。

2.那么,他们两者之间到底有什么区别呢,

我们看源码:

-------------------------------------------------------

+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
    return [newObject init];
else
    return newObject;
}
-------------------------------------------------------

而 alloc/init 像这样:

-------------------------------------------------------

+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); 
}

- init
{
    return self;
}
-------------------------------------------------------

通过源码中我们发现,[className new]基本等同于[[className alloc] init];
区别只在于alloc分配内存的时候使用了zone.
这个zone是个什么东东呢?
它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度;

3.而为什么不推荐使用new?

不知大家发现了没有:如果使用new的话,初始化方法被固定死只能调用init.
而你想调用initXXX怎么办?没门儿!据说最初的设计是完全借鉴Smalltalk语法来的。
传说那个时候已经有allocFromZone:这个方法,
但是这个方法需要传个参数id myCompanion = [[TheClass allocFromZone:[self zone]] init];

这个方法像下面这样:
--------------------
+ allocFromZone:(void *) z
{
return (*_zoneAlloc)((Class)self, 0, z); 
}
--------------------

后来简化为下面这个:
------------------------
+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); 
}
-------------------------

但是,出现个问题:这个方法只是给对象分配了内存,并没有初始化实例变量。
是不是又回到new那样的处理方式:在方法内部隐式调用init方法呢?
后来发现“显示调用总比隐式调用要好”,所以后来就把两个方法分开了。

概括来说,new和alloc/init在功能上几乎是一致的,分配内存并完成初始化。

差别在于,采用new的方式只能采用默认的init方法完成初始化,

                    采用alloc的方式可以用其他定制的初始化方法。


    
[3] 上传资料file控件美化
    来源: 互联网  发布时间: 2014-02-18
上传文件file控件美化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>input file的另类做法</title>
<style type="text/css">
.u-file-btn {
position: relative;
direction:ltr;
height:18px;
overflow:hidden;
line-height:18px;
margin-right:10px;
padding:3px0;
text-align: center;
width:105px;
background:#880000;
color:#FFF;
}

.u-file-btn input{
cursor: pointer;
text-align: right;
z-index:10;
font-size:118px;/* font-size: 118px 工作正常 */       
position: absolute;
top:0px;
right:0px;
opacity:0;
filter:Alpha(opacity:100);
}
</style>
</head>
<body>
<div >         <input type="file"name="attach"/>请选择上传文件 </div>
</body>
</html>

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
nosql iis7站长之家
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3