GVKun编程网logo

网易云IM小程序聊天室集成PHP版SDK API使用示例(网易云小程序开发)

10

在这里,我们将给大家分享关于网易云IM小程序聊天室集成PHP版SDKAPI使用示例的知识,让您更了解网易云小程序开发的本质,同时也会涉及到如何更有效地C#版ASP.NETWebAPI使用示例、Goog

在这里,我们将给大家分享关于网易云IM小程序聊天室集成PHP版SDK API使用示例的知识,让您更了解网易云小程序开发的本质,同时也会涉及到如何更有效地C#版ASP.NET Web API使用示例、Google-S2 空间索引框架简介及部分API使用示例、html5 文件api使用示例、Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)的内容。

本文目录一览:

网易云IM小程序聊天室集成PHP版SDK API使用示例(网易云小程序开发)

网易云IM小程序聊天室集成PHP版SDK API使用示例(网易云小程序开发)

 出售微信小程序聊天室完整源码,也可定制开发微信小程序。扫码加微信详聊

PHP

<pre>
<?php
/**

  • 网易云信server API 接口使用示例 1.6

  • @author hzchensheng15@corp.netease.com

  • @date 2015-10-28 10:30

  • **/
    //使用示例
    require('./ServerAPI.php');
    header("Content-Type:text/html;charset=utf8");
    header("Access-Control-Allow-Origin:
    "); //解决跨域
    header('Access-Control-Allow-Methods:POST');// 响应类型
    header('Access-Control-Allow-Headers:*'); // 响应头设置

    //参数说明:user1 ===$my_accid 用户ID teamid=$tid 聊天室ID
    //print_r( $p->createuserId('Sulaym1an') ) ; //这个ID随便输入

    $openid = $_POST['openid'];
    $AppKey = 'a59ef471d19a0196585053796aec194f';
    $AppSecret = 'c202ee13b20a';

    $my_token ='33c5926754ad6fa0e53c9aa014a53999';
    $my_accid ='o_vmp4vcarx5ssfda9lr3t7tueiw';
    $my_openid='o_vmP4vCARx5SsfDa9Lr3t7tUEIw';
    $tid='1505206112';

    $p = new ServerAPI($AppKey,$AppSecret,'curl'); //PHP curl库

    print_r( $p->createGroup('测试聊天室','o_vmp4vcarx5ssfda9lr3t7tueiw',array('o_vmp4vcarx5ssfda9lr3t7tueiw'),'','invite','0','') );

    print_r( $p->queryGroup(array('1505206112') ));
    //创建云信Id
    // print_r( $p->createuserId('Sulayman') ) ;
    //更新云信Id
    //print_r( $p->updateUserId('user1') ) ;
    //更新并获取新token
    //print_r( $p->updateUserToken('user1') ) ;
    //封禁云信ID
    // print_r( $p->blockUserId('user1') ) ;
    //解禁云信ID
    // print_r( $p->unblockUserId('user1') ) ;
    //更新用户名片
    // print_r( $p->updateUinfo('user1') ) ;
    // 获取用户名片
    //print_r( $p->getUinfos( array('user1','user2') ) ) ;
    // 好友关系-加好友
    //print_r( $p->addFriend('user1','user2','1','请求的话') );
    // 好友关系-更新好友关系
    //print_r( $p->updateFriend('user1','备注') );
    // 好友关系-获取好友关系
    //print_r( $p->getFriend('user1') );
    // 好友关系-删除好友信息
    //print_r( $p->deleteFriend('user1','user2') );
    // 好友关系-设置黑名单
    //print_r( $p->specializefriend('user1','0') );
    // 好友关系-查看黑名单
    // print_r( $p->listBlackFriend('user1') );
    //消息功能-发送普通消息
    //print_r( $p->sendMsg('user1',array('msg'=>'hello'),array("push"=>false,"roam"=>true,"history"=>true,"sendersync"=>true,"route"=>false) ) );
    //消息功能-发送自定义系统消息
    //print_r( $p->sendAttachMsg('user1','helloworld') );
    //消息功能-文件上传
    //print_r( $p->uploadMsg(base64_encode('gwettwgsgssgs323f'),'0') );
    //消息功能-文件上传(multipart方式)
    //print_r( $p->uploadMultimsg( base64_encode('gwettwgsgssgs323f') ) );

//群组功能(高级群)-创建群
//print_r( $p->createGroup('groupname','user1',array('user1','user2'),'') );
//群组功能(高级群)-拉人入群
//print_r( $p->addIntoGroup('teamid','请您入伙') );
//群组功能(高级群)-踢人出群
//print_r( $p->kickFromGroup('teamid','user2' ) );
//群组功能(高级群)-踢人出群
//print_r( $p->removeGroup('teamid','user1' ) );
//群组功能(高级群)-更新群资料
//print_r( $p->updateGroup('teamid','groupname') );
//群组功能(高级群)-群信息与成员列表查询
//print_r( $p->queryGroup(array('teamid1','teamid2') ) );
//群组功能(高级群)-移交群主
//print_r( $p->changeGroupOwner('teamid','2' ) );
//群组功能(高级群)-任命管理员
//print_r( $p->addGroupManager('teamid',array('user2') ) );
//群组功能(高级群)-移除管理员
//print_r( $p->removeGroupManager('teamid',array('user2') ) );
//群组功能(高级群)-获取某用户所加入的群信息
//print_r( $p->joinTeams('user1') );
//群组功能(高级群)-修改群昵称
//print_r( $p->updateGroupNick('teamid','xxx' ) );

//历史记录-单聊
//print_r( $p->querySessionMsg('user1',(string)(time()1000-2000000),(string)(time()1000),'100','2' ) );
//历史记录-群聊
//print_r( $p->queryGroupMsg('teamid','2' ) );

//发送短信验证码
//print_r( $p->sendSmsCode('phonenum1','') );
//校验验证码
//print_r( $p->verifycode('phonenum1','验证码') );
//发送模板短信
//print_r( $p->sendSMstemplate('templateid',array('phonenum1') ) );
//查询模板短信发送状态
//print_r( $p->querySMsstatus('templateid') );

//发起单人专线电话
// print_r( $p->startcall('Sulayman','13095088501','18085997799',90) );
//发起专线会议电话
//print_r( $p->startconf('user1','phonenum1',array('phonenum2','phonenum3'),60) );
//查询单通专线电话或会议的详情
//print_r( $p->queryCallsBySession('user1',sessionid) );

//获取语音视频安全认证签名
// print_r( $p->getUserSignature(1234) );

//创建一个直播频道
// print_r( $p->channelCreate('test_channel',1) );
//修改直播频道信息
// print_r( $p->channelUpdate('test_channel','a918fdaf85a4458688e8f2789904ba6f',1) );
//删除一个直播频道
// print_r( $p->channelDelete('a918fdaf85a4458688e8f2789904ba6f') );
//获取一个直播频道的信息
// print_r( $p->channelStats('a918fdaf85a4458688e8f2789904ba6f') );
//获取用户直播频道列表
// print_r( $p->channelList() );
//重新获取推流地址
// print_r( $p->channelRefreshAddr('a918fdaf85a4458688e8f2789904ba6f') );

?>

.

C#版ASP.NET Web API使用示例

C#版ASP.NET Web API使用示例

为更好更快速的上手Webapi设计模式的接口开发,本文详细解释了在Web API接口的开发过程中,我们可能会碰到各种各样的问题总结了这篇,希望对大家有所帮助。

1:在接口定义中确定MVC的get或者POST方式

由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpGet]或者[HttpPost],虽然有些接口也可以不用声明,但是避免出现类似下面的错误信息,显式声明还是有好处的。

 

如下代码片段依次展示

HttpGet

=============================================================================

/// <summary>
        /// 查询数据库,检查是否存在指定ID的对象
        /// </summary>
        /// <param name="id">对象的ID值</param>
        /// <returns>存在则返回指定的对象,否则返回Null</returns>[HttpGet]
        public virtual T FindByID(string id, string token)

================================================

HttpPost:

        /// <summary>
        /// 插入指定对象到数据库中
        /// </summary>
        /// <param name="info">指定的对象</param>
        /// <returns>执行操作是否成功。</returns>[HttpPost]
        public virtual CommonResult Insert(T info, string token, string signature, string timestamp, string nonce, string appid)

================================================

2:动态对象的接口定义

在一般的Web API接口里面,我们可能都会碰到很多简单类型的参数,但是又想让它们以POST方式提交数据,那么我们就可以有两种方法来处理,一种是定义一个类来放置这些参数,一种是采用动态的JObject参数,前者有很多不方便的地方,因为我们不可能为每个接口参数定义多一个实体类,这样可能会有很多难以管理的类定义。如下面是微信API的调用接口案例,我们也需要设置这样的处理规则。

如下图代码片段示例:

//接口调用请求说明
//http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN
POST数据格式:jsonPOST数据例子:{"group":{"id":108,"name":"test2_modify2"}}

看完以上简单的示例代码描述解释,应该对WebApi有一定初步了解,接下来我们就要通过简单示例程序来了解下。

1:如下图新建web项目

 

2:选择webapi设计模板

 

3: 点击确定后,VS会自动为我们创建一个完整的可运行的ASP.NET Web API的项目。

从项目的目录结构可以看出,ASP.NET Web API与ASP.NET MVC项目的结构几乎一致。我们删除为我们默认创建并打开的ValuesController文件(示例性文件,可以参考)。

既然要打造一个IP地址查询服务接口,为了跟上文的服务形式一致,我们还是使用GET请求方式的服务,不过我们这次使用MVC中的Web API来实现。

首先在Models文件夹中建立一个Address模型类。

 

4:注意(在这里我重要强调下,在了解webapi之前要对

MVC设计模式要有一定的基础

在这里我简单介绍下生成的MVC 设计结构:如下解释

MVC是模型(model)、视图(view)、控制(controller)这三个单词上的首字母组成。它是一种目前广泛流行的应用模型,它的目的是实现Web系统的职能分工。(如下图解释模型分工层)

 

 

设计模式的优点:

MVC的处理过程是这样的:对于每一个用户输入的请求,首先被控制器接收,控制器决定用哪个模型来进行处理,然后模型通过业务逻辑层处理用户的请求并返回数据,最后控制器确定用哪个视图模型,用相应的视图格式化模型返回数据,并通过显示页面呈现给用户。

通过MVC这种特殊的设计结构,大大提高了Web应用的开发效率。

Ok我们继续继续开工,当生成好后我们架构,要打造一个IP地址查询服务接口,为了跟上文的服务形式一致,我们还是使用GET请求方式的服务,不过我们这次使用MVC中的Web API来实现。

首先在Models文件夹中建立一个Address模型类(模型对象,属性类)如下图添加地址类

 

在模型类里面添加我们需要的属性参数:如下代码片段

    public class Address

    {

        //以下三个属于模型类属性==【高峰2017-11-17】

 

        /// <summary>

        /// 城市IP段

        /// </summary>

        public string IPAddress { get; set; }

        /// <summary>

        /// 省份

        /// </summary>

        public string Province { get; set; }

        /// <summary>

        /// 城市

        /// </summary>

        public string City { get; set; }

    }

接着我们在Controllers文件夹下建立一个IPAddressController控制器,需要注意的是,这个IPAddressController一定要继承自ApiController类,这样服务才能暴露出来。

如下图展示注意:绿色注释解析

 

 

Ok,只要做上面两步就可以运行这个项目了,我们按Ctrl+F5运行整个项目,出现了如下的页面,点击API跳转进入API接口列

 

我们所写的地址接口:

 

 

最后界面展示出来我们需要的三个参数支持application/json, text/json

实例:如下

{
  "IPAddress": "sample string 1",
  "Province": "sample string 2",
  "City": "sample string 3"
}

Ok当我们测试运行没有问情况下需要验证,我们实现的功能:验证有两种方式,一种是直接发布出来,挂载到IIS web服务器上,第二种是

通过第三方插件工具提送开发环境下的测试。此次我们两种都介绍,如下第一种发布挂载到IIS上,ok,废话不多,搞起!!!!

第一:如下图选中项目,选择发布

 

 

接下来选择配置文件中的自定义文件,起一个霸气的名字,然后我们下一步如图所示

 

在Publish method路径选择file System,然后在以下中选择自己定义好的物资位置如下图:

 

我们继续下一步,如下图:

 

继续点击下一步:如下图

 

点击部发布后如下图VS控制台提示:

 

当出现以上图片显示就说明我们发布成功了,接下来我们就可以发布到IIS上了如下图一步步看图。

1:发布准备文件

 

2:发布到IIS上

 

3:然后选中上图红色标识看效果如下图开始测试

 

Ok,自动这里我们已经发布出来成功的挂在了IIS上,可提供给第三方使用,后面有需要具体流程业务,可以自己在添加流程。

 

第二:选择第三方插件在开发环境下进行测试

WebApi接口测试工具:WebApiTestClient在便器工具更新下找到该工具

安装WebApiTestClient即可。

 

Ok,到这里我们这部分webapi接口简单实例就已经完成,下面我将盖实例程序上传到文档供大家参考,修订!!!!

webapi_test为简单实例、HBTechPlatformHis包为整合实体项目案例

Google-S2 空间索引框架简介及部分API使用示例

Google-S2 空间索引框架简介及部分API使用示例

1.关于S2框架的一些知识

为避免翻译造成的部分名词的歧义和理解上的不便,我将Google S2的源代码和说明直接贴出来 (如果无法访问该网址请在我的GIT@OSC项目 Google-S2-demo下载文档。

Google Code S2在Google Code上的项目地址

Foursquare的S2的论文

S2Map算法的地图测试站点

2.使用S2计算空间地理位置

S2使用的是WGS84坐标(GPS导航坐标),如果你获得的是百度或者高德的地理坐标,请将其转换为GPS坐标,以防止计算的位置不准确。 2.1 计算地球上两个点之间的距离

        double lat = 22.629164;
        double lgt =114.025514 ;
        S2LatLng s2LatLng = S2LatLng.fromDegrees(lat, lgt);
        S2Point s2Point = s2LatLng.toPoint();
        double earthDistance = s2LatLng.getEarthDistance(new S2LatLng(s2Point)); //单位为m
        System.out.println(earthDistance); //输出距离为0
        //s2LatLng.getDistance() //可以用于计算两点之间的弧度距离

2.2 计算地球上某个点是否在矩形区域内

          String[] split = "114.025914,22.629364".split(",");
        String[] coord = "114.027745,22.623408".split(",");
        S2LatLngRect rect = new S2LatLngRect(S2LatLng.fromDegrees(Double.valueOf(split[1]),Double.valueOf(split[0])),
                S2LatLng.fromDegrees(Double.valueOf(coord[1]),Double.valueOf(coord[0])));
        // S2RegionCoverer coverer = new S2RegionCoverer();
        //设置cell
        //        coverer.setMinLevel(8);
        //        coverer.setMaxLevel(15);
       //        coverer.setMaxCells(500);
       //        S2CellUnion covering = coverer.getCovering(rect);

        double lat = 22.629164;
        double lgt =114.025514 ;
        S2LatLng s2LatLng = S2LatLng.fromDegrees(lat, lgt);
        boolean contains = rect.contains(s2LatLng.toPoint());
        System.out.println(contains);

2.3 计算点是否在在圆形区域内

	 double lng = 112.030500;
	 double lat = 27.970271;
         double capHeight = 600.5; //半径
	 S2LatLng s2LatLng= S2LatLng.fromDegrees(lat, lng);
	 S2Cap cap = S2Cap.fromAxisHeight(s2LatLng.toPoint(),capHeight);
	 
	  double lat2 = 22.629164;
	  double lgt2 =114.025514 ;
	  S2LatLng s2LatLng = S2LatLng.fromDegrees(lat2, lng2);
	  boolean contains = cap.contains(s2LatLng.toPoint());
	  System.out.println(contains);

2.3 计算点是否在在多边形内

	String str = "114.025914,22.629364;114.027745,22.623408;114.028944,22.619712;114.030112,22.617669;114.033967,22.612966;114.042343,22.602816;114.046114,22.603997;114.048353,22.604289;114.049606,22.604455;114.050796,22.604898;114.051728,22.605412;114.053186,22.606647;114.054171,22.608369";
        double lat = 22.629164;
        double lgt =114.025514 ;
	 List<S2Point> vertices = Lists.newArrayList();
	for (String token : Splitter.on('';'').split(str)) {
            int colon = token.indexOf('','');
            if (colon == -1) {
                throw new IllegalArgumentException(
                        "Illegal string:" + token + ". Should look like ''114.139312,22.551337;114.120260,22.535537''");
            }
            double lngY = Double.parseDouble(token.substring(0, colon));
            double latX = Double.parseDouble(token.substring(colon + 1));
            vertices.add(S2LatLng.fromDegrees(latX, lngY).toPoint());
        }
	S2Loop s2Loop = new S2Loop(vertices);
	 S2Polygon polygon = new S2Polygon(s2Loop); //创建多边形
        S2Point s2Point = S2LatLng.fromDegrees(lat, lgt).toPoint();
       boolean contains = polygon.contains(s2Point);
	System.out.println(contains);

2.3 计算两个区域是否有交集

//计算一个正方形和多边形之间是否有交集
String str = "114.025914,22.629364;114.027745,22.623408;114.028944,22.619712;114.030112,22.617669;114.033967,22.612966;114.042343,22.602816;114.046114,22.603997;114.048353,22.604289;114.049606,22.604455;114.050796,22.604898;114.051728,22.605412;114.053186,22.606647;114.054171,22.608369";
        double lat = 22.629164;
        double lgt =114.025514 ;

        List<S2Point> vertices = Lists.newArrayList();

        for (String token : Splitter.on('';'').split(str)) {
            int colon = token.indexOf('','');
            if (colon == -1) {
                throw new IllegalArgumentException(
                        "Illegal string:" + token + ". Should look like ''114.139312,22.551337;114.120260,22.535537''");
            }
            double lngY = Double.parseDouble(token.substring(0, colon));
            double latX = Double.parseDouble(token.substring(colon + 1));
            vertices.add(S2LatLng.fromDegrees(latX, lngY).toPoint());
        }

        S2Loop s2Loop = new S2Loop(vertices);
        S2Polygon polygon = new S2Polygon(s2Loop);
        S2Point s2Point = S2LatLng.fromDegrees(lat, lgt).toPoint();
        boolean contains = polygon.contains(s2Point);
        System.out.println(contains);

        String[] split = "114.025914,22.629364".split(",");
        String[] coord = "114.027745,22.623408".split(",");
        S2LatLngRect rect = new S2LatLngRect(S2LatLng.fromDegrees(Double.valueOf(split[1]),Double.valueOf(split[0])),
                S2LatLng.fromDegrees(Double.valueOf(coord[1]),Double.valueOf(coord[0])));
        S2RegionCoverer coverer = new S2RegionCoverer();
        //设置cell
        coverer.setMinLevel(8);
        coverer.setMaxLevel(15);
        coverer.setMaxCells(500);
        S2CellUnion covering = coverer.getCovering(rect);
        for (S2CellId s2CellId : covering.cellIds()) {
            boolean b = polygon.mayIntersect(new S2Cell(s2CellId));
            if (b){
                System.out.println("两个区域之间含有交集.....");
            }
        }

3.关于S2框架的计算性能和精度

综合我目前在项目中的使用情况来看,S2框架的性能比我自己利用计算机图形学上的实现的地理空间位置计算算法更好,而且由于S2使用了索引机制并使用希伯来曲线来建立多层次的CellID,在计算的精确度上肯定是S2框架更高。个人推荐你使用S2解决空间位置计算位置,S2也有多种语言的实现,如PHP,Python等。

4.将Google-S2框架构的Maven项目依赖

因为Google官方并没有在Maven上发布Google-S2-Java的Maven依赖包,所以在项目中需要自己将S2项目的源码重构为一个Maven项目,然后上传到局域网的Maven私服中,方便项目使用。 我在GIT@OSC上已经将Google-S2项目重构为一个Maven项目,大家要使用的可以直接Clone下来。

html5 文件api使用示例

html5 文件api使用示例

下面是小编 jb51.cc 通过网络收集整理的代码片段。

小编小编现在分享给大家,也给大家做个参考。

<!DOCTYPE html>
<html>
<head>
<Meta charset="UTF-8">
<title>html5文件API</title>
<script type="text/javascript">
   
   function getName(){
       var file = document.getElementById("file");
       //document.getElementById("file").files 
       // 返回 FileList对象 
       var files = file.files;
      for(i=0;i<files.length;i++){
          //获取文件的名称 
          alert(files[i].name);
      }
   }
    
   function getSize(){
       var file = document.getElementById("file1");
        
       var size =file.files[0].size;//显示文件的尺寸 
       /*
       excel:application/vnd.ms-excel
       word:application/msword(.doc),application/vnd.openxmlformats-officedocument.wordprocessingml.document(.docx)
           实际应用中要根据具体的type类型 限制 上传的类型,用正则表达式验证 
       */
       var type =file.files[0].type;//文件的类型  image/png,image/jpeg,text/plain,text/html
       
       //对文件列表FileList才有意义,对file对象没有作用,也就是说上传单个文件也要有数组形式访问其属性 ..
        
       var name =file.files[0].name;
       document.getElementById("mark").innerHTML=type;
       alert(size+","+type+","+name);
   }
</script>
</head>
<body>
 
   <form action="">
   <!-- html5为文件域添加multiple="multiple"支持多文件上传,用逗号分隔 -->
   附件:<input type="file" id="file" multiple="multiple" onblur="getName();" >
   <!-- 添加accept属性 限制要选择的文件的类型,但只是在打开文件选择那一刻筛选出符合条件的文件,例如:下面要求文件类型为图片,打开文件选择框时只会列出所有的图片文件;
   具体情况各大浏览器支持不一样: Firefox 列出所有文件,chrome自动筛选出符合条件的文件,IE9和FF一样,
   可以说不支持吧
    -->
   头像 : <input type="file" id="file1" accept="image/*">
      文件的类型:<mark id="mark"></mark>
   <input type="button" value="获取文件大小" onclick="getSize();">
   </form>
   <!-- FileReader接口 示例  -->
    
    
    
   <input type="file" id="rd">
   <span id="msg"></span>
  <input type="button" value="以文本形式读取" onclick="readAsText();">
  <input type="button" value="以二进制形式读取" onclick="readAsBinaryString();">
  <input type="button" value="以dataURL形式读取" onclick="readAsDataURL();">
   
  <script type="text/javascript">
      
   var file = document.getElementById("rd");
    
   if (typeof FileReader =="undefined"){
       msg.value="您的浏览器不支持FileReader";
       //禁用文件域 
       file.setAttribute("disabled","disabled");
   }
   else{
      console.info("恭喜您可以使用...");
   }
   //将文件读取为文本
     function readAsText(){
         
       var file = document.getElementById("rd").files[0];
       var reader = new FileReader();
       reader.readAsText(file);
       //onload 加载成功 后触发 
       reader.onload=function(e){
           var msg = document.getElementById("msg");
           //把读取到的文本信息显示 
           //msg.value=this.result;
           console.info(reader.result);
       }
        
     }
     //将文件读取为二进制
 function readAsBinaryString(){
          
     var file = document.getElementById("rd").files[0];
       var reader = new FileReader();
       //二进制形式读取 
       reader.readAsBinaryString(file);
       //onload 加载成功 后触发 
       reader.onload=function(e){
           var msg = document.getElementById("msg");
           //把读取到的文本信息显示 
           //msg.value=this.result;
            
           console.info(reader.result);
           console.info("load触发,加载成功...");
       }
       //加载结束触发,不管成功失败 
       reader.onloadend=function(){
           console.info("loadend触发,加载结束...");
       }
       //开始加载触发 
       reader.onloadstart=function(){
           console.info("loadstart触发,开始加载...");
       }
       //记载出错触发 
       reader.onerror=function(){
           console.info("error触发,加载过程中出现错误...");
       }
       //中断记载触发 
       reader.onabort=function(){
           console.info("abort触发,加载中断触发...");
       }
       //记载进程,可用progress标签显示加载进度 
       reader.onprogress=function(){
           console.info("progress触发,加载中...");
       }
          
     }
  //将文件读取为DataURL
 function readAsDataURL(){
     var file = document.getElementById("rd").files[0];
       var reader = new FileReader();
       //图片验证 
       if (!/image\/\w+/.test(file.type)){
           alert("只能输出图片");
           return ;
       }
       //二进制形式读取 
       reader.readAsDataURL(file);
       //onload 加载成功 后触发 
       reader.onload=function(e){
           var msg = document.getElementById("msg");
           //把读取到的文本信息显示 
           //msg.value=this.result;
           //console.info(reader.result);
           //把图片显示到页面中....
           msg.innerHTML='<img src='+this.result+' />';
       } 
 }
   </script>
</body>
</html>


以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。

Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)

Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)

枚举的特点:

◆类型安全(Type Safety) 
◆紧凑有效的枚举数值定义(Compact, Efficient Declaration of Enumerated Values) 
◆无缝的和程序其它部分的交互操作(Seamless integration with other language features) 
◆运行的高效率(Runtime efficiency)

详情请看:http://www.51cto.com/specbook/11/32877.htm

1、使用Java普通类模拟枚举的实现原理

import java.util.HashMap;
import java.util.Map;

/**
 * 模拟星期中的表示的天,每个星期天都表示一个对象
 * 1、类中的每一个枚举成员都是该类的一个实例对象
 * 2、构造函数私有化
 * 3、提供操作枚举成员的抽象方法和静态方法
 * @author 杨信
 *
 */
public abstract class WeekDate {
	
	/**
	 * 星期一
	 */
	public static final WeekDate MON = new WeekDate("MON",0) {	//匿名子类

		@Override
		public WeekDate nextDay() {
			return TUES;
		}

		@Override
		public WeekDate preDay() {
			return SUN;
		}
		
		@Override
		public String toString() {
			return "WeekDate.MON";
		}
		
	};	
	
	/**
	 * 星期二
	 */
	public static final WeekDate TUES = new WeekDate("TUES",1) {

		@Override
		public WeekDate nextDay() {
			return WEDNES;
		}

		@Override
		public WeekDate preDay() {
			return MON;
		}
		
		@Override
		public String toString() {
			return "WeekDate.TUES";
		}
	
	};
	
	/**
	 * 星期三
	 */
	public static final WeekDate WEDNES = new WeekDate("WEDNES",2) {

		@Override
		public WeekDate nextDay() {
			return THURS;
		}

		@Override
		public WeekDate preDay() {
			return TUES;
		}
		
		@Override
		public String toString() {
			return "WeekDate.WEDNES";
		}
		
	};
	
	/**
	 * 星期四
	 */
	public static final WeekDate THURS = new WeekDate("THURS",3) {

		@Override
		public WeekDate nextDay() {
			return FRI;
		}

		@Override
		public WeekDate preDay() {
			return WEDNES;
		}
		
		@Override
		public String toString() {
			return "WeekDate.THURS";
		}
		
	};
	
	/**
	 * 星期五
	 */
	public static final WeekDate FRI = new WeekDate("FRI",4){

		@Override
		public WeekDate nextDay() {
			return SATUR;
		}

		@Override
		public WeekDate preDay() {
			return THURS;
		}
		
		@Override
		public String toString() {
			return "WeekDate.FRI";
		}
		
	};
	
	/**
	 * 星期六
	 */
	public static final WeekDate SATUR = new WeekDate("SATUR",5){

		@Override
		public WeekDate nextDay() {
			return SUN;
		}

		@Override
		public WeekDate preDay() {
			return FRI;
		}
		
		@Override
		public String toString() {
			return "WeekDate.SATUR";
		}
		
	};
	
	/**
	 * 星期日
	 */
	public static final WeekDate SUN = new WeekDate("SUN",6){

		@Override
		public WeekDate nextDay() {
			return MON;
		}

		@Override
		public WeekDate preDay() {
			return SATUR;
		}
		
		@Override
		public String toString() {
			return "WeekDate.SUN";
		}

	};
	
	private static Map<String, WeekDate> valueMap = new HashMap<String, WeekDate>();
	
	/**
	 * 枚举名称
	 */
	private final String name;
	
	/**
	 * 枚举成员的顺序
	 */
	private final int ordinal;
	
	private WeekDate(String name,int ordinal) {
		this.name = name;
		this.ordinal = ordinal;
	}
	
	/**
	 * 保存枚举成员
	 */
	private static WeekDate[] values = {
		MON,TUES,WEDNES,THURS,FRI,SATUR,SUN
	};
	
	//初始化
	static {
		valueMap.put("MON", values[0]);
		valueMap.put("TUES", values[1]);
		valueMap.put("WEDNES", values[2]);
		valueMap.put("THURS", values[3]);
		valueMap.put("FRI", values[4]);
		valueMap.put("SATUR", values[5]);
		valueMap.put("SUN", values[6]);
	}
	
	/**
	 * 下一天
	 * @return
	 */
	public abstract WeekDate nextDay();
	
	/**
	 * 前一天
	 * @return
	 */
	public abstract WeekDate preDay();
	
	/**
	 * 枚举中的所有成员
	 * @return
	 */
	public static WeekDate[] values() {
		return values;
	}
	
	/**
	 * 将一个字符串转换成一个枚举成员对象
	 * @param name 枚举名称
	 * @return 枚举对象
	 */
	public static WeekDate valueOf(String name) {
		if (name.equalsIgnoreCase("MON")) {
			return MON;
		} else if (name.equalsIgnoreCase("TUES")) {
			return TUES;
		} else if (name.equalsIgnoreCase("WEDES")) {
			return WEDNES;
		} else if (name.equalsIgnoreCase("THURS")) {
			return THURS;
		} else if (name.equalsIgnoreCase("FRI")) {
			return FRI;
		} else if (name.equalsIgnoreCase("SATUR")) {
			return SATUR;
		} else if (name.equalsIgnoreCase("SUN")) {
			return SUN;
		} else {
			throw new IllegalArgumentException("找不到" + name + "枚举类型!");
		}
	}
	
	/**
	 * 优化字符串转枚举对象
	 * @param name 枚举名称
	 * @return 枚举对象
	 */
	public static WeekDate valueOf_2(String name) {
		WeekDate value = valueMap.get(name.toUpperCase());
		if (value == null) {
			throw new IllegalArgumentException("找不到" + name + "枚举类型!");
		}
		return value;
	}

	public String getName() {
		return name;
	}

	public int getOrdinal() {
		return ordinal;
	}
	
	/**
	 * 下一天
	 * @return
	 */
	/*public String nextDay() {
		if(this == MON) {
			return "TUES";
		} else if (this == TUES) {
			return "WEDNES";
		} else if (this == WEDNES) {
			return "THURS";
		} else if (this == THURS) {
			return "FRI";
		} else if (this == FRI) {
			return "SATUR";
		} else if (this == SATUR) {
			return "SUN";
		} else {
			return "MON";
		}
	}*/
	
	/**
	 * 前一天
	 */
	/*public String preDay() {
		if (this == MON) {
			//....
		} else if (...)....
	}*/
	
}


2、使用JDK5.0中提供的枚举特性改善普通类模拟枚举的功能

/**
 * 枚举的应用
 * 存储每周中的天份
 */
public enum WeekDateEnum {

	MON {
		
		@Override
		public WeekDateEnum nextDay() {
			return TUES;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return SUN;
		}
		
	},  TUES {
		
		@Override
		public WeekDateEnum nextDay() {
			return WEDNES;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return MON;
		}
		
	},  WEDNES {
		
		@Override
		public WeekDateEnum nextDay() {
			return THURS;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return TUES;
		}
		
	},  THURS {
		
		@Override
		public WeekDateEnum nextDay() {
			return FRI;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return WEDNES;
		}
		
	},  FRI {
		
		@Override
		public WeekDateEnum nextDay() {
			return SATUR;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return THURS;
		}
		
	},  SATUR {
		
		@Override
		public WeekDateEnum nextDay() {
			return SATUR;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return FRI;
		}
		
	},  SUN {
		
		@Override
		public WeekDateEnum nextDay() {
			return SATUR;
		}
		
		@Override
		public WeekDateEnum preDay() {
			return MON;
		}
		
	};

	private WeekDateEnum() {}
	
	/**
	 * 下一天
	 * @return
	 */
	public abstract WeekDateEnum nextDay();
	
	/**
	 * 前一天
	 * @return
	 */
	public abstract WeekDateEnum preDay();
	
	/**
	 * 枚举对象公共的toString方法,可以在case块中反馈自己想要返回的信息
	 */
	public String toString() {
		switch (this) {
		case MON:
			return "WeekDateEnum.MON";
		case TUES:
			return "WeekDateEnum.TUES";
		case WEDNES:
			return "WeekDateEnum.WEDNES";
		case THURS:
			return "WeekDateEnum.THURS";
		case FRI:
			return "WeekDateEnum.FRI";
		case SATUR:
			return "WeekDateEnum.SATUR";
		case SUN:
			return "WeekDateEnum.SUN";
		default:
			return null;
		}
	}
}


3、枚举功能测试

/**
 * 枚举功能测试
 */
public class EnumTest {

	public static void main(String[] args) {
		
		//使用普通JAVA类模拟枚举的应用
		WeekDate weekDate = WeekDate.MON;		//获得一个枚举对象
		//调用枚举中提供的方法
		System.out.println(weekDate.nextDay());	
		System.out.println(weekDate.preDay());
		System.out.println(weekDate.getName());
		//获得枚举成员所在枚举成员列表中的位置
		System.out.println(weekDate.getOrdinal());
		//调用某一个枚举成员的方法
		System.out.println(WeekDate.values()[0].preDay());
		System.out.println("---------------遍历枚举成员,普通JAVA类模拟--------------------------");
		for (WeekDate weekDate2 : WeekDate.values()) {
			System.out.println(weekDate2);
		}
		
		System.out.println("\n=================================================================\n");
		
		//使用JDK中提供的枚举特性功能应用
		WeekDateEnum weekDateEnum = WeekDateEnum.MON;	//获得一个枚举对象
		System.out.println(WeekDate.values().length); 	//获得枚举成员数量
		System.out.println(weekDateEnum.name());		//获得枚举的字符串名称
		System.out.println(weekDateEnum.toString());	//打印枚举对象,已重写toString方法,默认打印枚举的名称
		System.out.println(weekDateEnum.nextDay().ordinal());	//枚举成员列表中的位置
		System.out.println(WeekDateEnum.valueOf("FRI").nextDay().ordinal());
		System.out.println("---------------遍历枚举成员,使用JDK的枚举特性-------------------------");
		for (WeekDateEnum enumDemo : WeekDateEnum.values()) {
			System.out.println(enumDemo);
		}
		
	} 
	
}

4、测试结果


我们今天的关于网易云IM小程序聊天室集成PHP版SDK API使用示例网易云小程序开发的分享已经告一段落,感谢您的关注,如果您想了解更多关于C#版ASP.NET Web API使用示例、Google-S2 空间索引框架简介及部分API使用示例、html5 文件api使用示例、Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)的相关信息,请在本站查询。

本文标签: