随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

操作步骤:

1、在share官网注册应用生成AppKey并下载SDK     网址:http://www.shareSDK.cn

2、在人人网平台注册应用生成AppId和AppKey    网址:http://dev.renren.com

3、导入SDK包。只实现人人网授权登录分享的话只需要导入ShareSDK-Core.jar(核心包)、ShareSDK-Renren.jar(人人网)、cn.sharesdk.onekeyshare.jar(快捷分享)

4、配置:需要配置AndroidManifest.xml和assets里面的ShareSDKDevInfor.xml和(后面有示例介绍)

5、添加代码实现登录、获取信息、分享等功能(见下面示例)。

ShareSDKDevInfor.xml:

<?xml version="1.0" encoding="utf-8"?>
<DevInfor><!--说明:       1、表格中的第一项<ShareSDK AppKey="api20" />是必须的,其中的AppKey是你在Share SDK上注册的开发者帐号的AppKey2、所有集成到你项目的平台都应该为其在表格中填写相对应的开发者信息,以新浪微博为例:<SinaWeiboSortId="此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大越靠后"AppKey="填写你在新浪微博上注册的AppKey"AppSecret="填写你在新浪微博上注册到的AppKey"Id="自定义字段,整形,用于你项目中对此平台的识别符"RedirectUrl="填写你在新浪微博上注册的RedirectUrl" />        各个平台注册应用信息的地址如下:新浪微博:http://open.weibo.com腾讯微博:http://dev.t.qq.comQQ空间:http://connect.qq.com/intro/login/网易微博:http://open.t.163.com搜狐微博:http://open.t.sohu.com豆瓣:http://developers.douban.com人人网:http://dev.renren.com开心网:http://open.kaixin001.comInstapaper:http://www.instapaper.com/main/request_oauth_consumer_token有道云笔记:http://note.youdao.com/open/developguide.html#appfacebook:https://developers.facebook.comtwitter:https://dev.twitter.com搜狐随身看:https://open.sohu.comQQ好友分享:http://mobile.qq.com/api/微信:http://open.weixin.qq.com--><ShareSDK AppKey="123d2e98bef8" /><!-- AppKey="104972cdd48" "23a9371d3a8" --><RenrenApiKey="fc5b8aed373c4c27a05b712acba0f8c3"AppId="226427"Id="1"SecretKey="f29df781abdd4f49beca5a2194676ca4"SortId="1" /></DevInfor>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.home.renren"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.home.renren.LoginActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="com.home.renren.MainActivity" /><activity android:name="com.home.renren.ShowInfoActivity" /><!-- share SDK 里面的组件 --><activityandroid:name="cn.sharesdk.framework.AuthorizeActivity"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize" ></activity><activityandroid:name="cn.sharesdk.onekeyshare.ShareAllGird"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="adjustPan|stateHidden" /><activityandroid:name="cn.sharesdk.onekeyshare.SharePage"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait"android:windowSoftInputMode="stateHidden|adjustResize" /></application></manifest>

登录LoginActivity:

package com.home.renren;import java.util.HashMap;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.sharesdk.framework.AbstractWeibo;
import cn.sharesdk.framework.WeiboActionListener;
import cn.sharesdk.renren.Renren;public class LoginActivity extends Activity implements WeiboActionListener,Callback {private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login);AbstractWeibo.initSDK(this);handler = new Handler(this);Button logionBtn = (Button) findViewById(R.id.login_btn_renren);logionBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {AbstractWeibo weibo = AbstractWeibo.getWeibo(LoginActivity.this, Renren.NAME);weibo.setWeiboActionListener(LoginActivity.this);weibo.showUser(null);}});}@Overridepublic void onCancel(AbstractWeibo weibo, int arg1) {Message msg = new Message();msg.arg1 = 3;msg.obj = weibo;handler.sendMessage(msg);}@Overridepublic void onComplete(AbstractWeibo weibo, int arg1,HashMap<String, Object> arg2) {Message msg = new Message();msg.arg1 = 1;msg.obj = weibo;handler.sendMessage(msg);}@Overridepublic void onError(AbstractWeibo weibo, int arg1, Throwable t) {t.printStackTrace();Message msg = new Message();msg.arg1 = 2;msg.obj = weibo;handler.sendMessage(msg);}/*** 处理从授权页面返回的结果:异常则给出提示,正常则跳转页面* */@Overridepublic boolean handleMessage(Message msg) {AbstractWeibo weibo = (AbstractWeibo) msg.obj;switch (msg.arg1) {case 1: { // 成功Toast.makeText(this, weibo.getName() + "授权成功", Toast.LENGTH_SHORT).show();}break;case 2: { // 失败Toast.makeText(this, weibo.getName() + "授权失败", Toast.LENGTH_SHORT).show();return false;}case 3: { // 取消Toast.makeText(this, weibo.getName() + "授权取消", Toast.LENGTH_SHORT).show();return false;}}Intent intent = new Intent(LoginActivity.this, MainActivity.class);startActivity(intent);return false;}@Overrideprotected void onDestroy() {// 结束ShareSDK的统计功能并释放资源AbstractWeibo.stopSDK(this);super.onDestroy();}}

主界面MainActivity:

package com.home.renren;import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.sharesdk.framework.AbstractWeibo;
import cn.sharesdk.framework.WeiboActionListener;
import cn.sharesdk.onekeyshare.ShareAllGird;
import cn.sharesdk.renren.Renren;public class MainActivity extends Activity implements OnClickListener,Callback, WeiboActionListener {private Button getInfoBtn;private Button noUIShareBtn;private Button hasUIShareBtn;private Button logoutBtn;private Handler handler;// 定义图片存放的地址public static String TEST_IMAGE;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);AbstractWeibo.initSDK(this);initWidget();initImage();}/*** 初始化UI相关组件*/private void initWidget() {getInfoBtn = (Button) findViewById(R.id.main_get_userinfo);noUIShareBtn = (Button) findViewById(R.id.main_share_noUI);hasUIShareBtn = (Button) findViewById(R.id.main_share_hasUI);logoutBtn = (Button) findViewById(R.id.main_btn_logout);getInfoBtn.setOnClickListener(this);noUIShareBtn.setOnClickListener(this);hasUIShareBtn.setOnClickListener(this);logoutBtn.setOnClickListener(this);handler = new Handler(this);}@Overridepublic void onClick(View v) {if (v == getInfoBtn) {AbstractWeibo weibo = AbstractWeibo.getWeibo(this, Renren.NAME);weibo.setWeiboActionListener(this);weibo.showUser(null);} else if (v == noUIShareBtn) {showGrid(true);} else if (v == hasUIShareBtn) {showGrid(false);} else if (v == logoutBtn) {// 注销AbstractWeibo weibo = AbstractWeibo.getWeibo(this, Renren.NAME);if (weibo.isValid()) {weibo.removeAccount();finish();}}}/** 处理操作结果 */public boolean handleMessage(Message msg) {switch (msg.arg1) {case 1: { // 成功Intent intent = new Intent(MainActivity.this,ShowInfoActivity.class);intent.putExtra("data", String.valueOf(msg.obj));startActivity(intent);}break;case 2: {// 失败AbstractWeibo weibo = (AbstractWeibo) msg.obj;Toast.makeText(this, weibo.getName() + "授权失败", Toast.LENGTH_SHORT).show();}break;case 3: {// 取消AbstractWeibo weibo = (AbstractWeibo) msg.obj;Toast.makeText(this, weibo.getName() + "授权取消", Toast.LENGTH_SHORT).show();}break;}return false;}/*** 初始化分享的本地图片*/private void initImage() {try {// 判断SD卡中是否存在此文件夹if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())&& Environment.getExternalStorageDirectory().exists()) {File baseFile = new File(Environment.getExternalStorageDirectory(), "share");if (!baseFile.exists()) {baseFile.mkdir();}TEST_IMAGE = baseFile.getAbsolutePath() + "/picture.png";} else {TEST_IMAGE = getApplication().getFilesDir().getAbsolutePath()+ "/picture.png";}File file = new File(TEST_IMAGE);// 判断图片是否存此文件夹中if (!file.exists()) {file.createNewFile();Bitmap pic = BitmapFactory.decodeResource(getResources(),R.drawable.picture);FileOutputStream fos = new FileOutputStream(file);pic.compress(CompressFormat.JPEG, 100, fos);fos.flush();fos.close();}} catch (Throwable t) {t.printStackTrace();TEST_IMAGE = null;}}@Overridepublic void onCancel(AbstractWeibo weibo, int arg1) {Message msg = new Message();msg.arg1 = 3;msg.obj = weibo;handler.sendMessage(msg);}@Overridepublic void onComplete(AbstractWeibo arg0, int arg1,HashMap<String, Object> res) {Message msg = new Message();msg.arg1 = 1;JsonUtils ju = new JsonUtils();String json = ju.fromHashMap(res);msg.obj = ju.format(json);handler.sendMessage(msg);}@Overridepublic void onError(AbstractWeibo weibo, int arg1, Throwable arg2) {Message msg = new Message();msg.arg1 = 2;msg.obj = weibo;handler.sendMessage(msg);}/*** 使用快捷分享完成图文分享* * @param silent*            是否直接分享*/private void showGrid(boolean silent) {Intent i = new Intent(this, ShareAllGird.class);// 分享时Notification的图标i.putExtra("notif_icon", R.drawable.ic_launcher);// 分享时Notification的标题i.putExtra("notif_title", this.getString(R.string.app_name));// title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供i.putExtra("title", this.getString(R.string.share));// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供i.putExtra("titleUrl", "http://sharesdk.cn");// text是分享文本,所有平台都需要这个字段i.putExtra("text", this.getString(R.string.share_content));// imagePath是本地的图片路径,所有平台都支持这个字段,不提供,则表示不分享图片i.putExtra("imagePath", MainActivity.TEST_IMAGE);// url仅在微信(包括好友和朋友圈)中使用,否则可以不提供i.putExtra("url", "http://sharesdk.cn");// thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提供i.putExtra("thumbPath", MainActivity.TEST_IMAGE);// appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提供i.putExtra("appPath", MainActivity.TEST_IMAGE);// comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供i.putExtra("comment", this.getString(R.string.share));// site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供i.putExtra("site", this.getString(R.string.app_name));// siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供i.putExtra("siteUrl", "http://sharesdk.cn");// 是否直接分享i.putExtra("silent", silent);this.startActivity(i);}@Overrideprotected void onResume() {super.onResume();AbstractWeibo.initSDK(this);}
}

显示用户信息ShowInfoActivity:

package com.home.renren;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class ShowInfoActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show_info);TextView show = (TextView) findViewById(R.id.show_info_tv);show.setText(getIntent().getStringExtra("data"));}
}

工具类JsonUtils:

package com.home.renren;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;public class JsonUtils {/*** 将指定的json数据转成 HashMap<String, Object>对象*/public HashMap<String, Object> fromJson(String jsonStr) {try {if (jsonStr.startsWith("[") && jsonStr.endsWith("]")) {jsonStr = "{\"fakelist\":" + jsonStr + "}";}JSONObject json = new JSONObject(jsonStr);return fromJson(json);} catch (Throwable t) {t.printStackTrace();}return new HashMap<String, Object>();}private HashMap<String, Object> fromJson(JSONObject json)throws JSONException {HashMap<String, Object> map = new HashMap<String, Object>();@SuppressWarnings("unchecked")Iterator<String> iKey = json.keys();while (iKey.hasNext()) {String key = iKey.next();Object value = json.opt(key);if (JSONObject.NULL.equals(value)) {value = null;}if (value != null) {if (value instanceof JSONObject) {value = fromJson((JSONObject) value);} else if (value instanceof JSONArray) {value = fromJson((JSONArray) value);}map.put(key, value);}}return map;}private ArrayList<Object> fromJson(JSONArray array) throws JSONException {ArrayList<Object> list = new ArrayList<Object>();for (int i = 0, size = array.length(); i < size; i++) {Object value = array.opt(i);if (value instanceof JSONObject) {value = fromJson((JSONObject) value);} else if (value instanceof JSONArray) {value = fromJson((JSONArray) value);}list.add(value);}return list;}/*** 将指定的HashMap<String, Object>对象转成json数据*/public String fromHashMap(HashMap<String, Object> map) {try {return getJSONObject(map).toString();} catch (Throwable t) {t.printStackTrace();}return "";}@SuppressWarnings("unchecked")private JSONObject getJSONObject(HashMap<String, Object> map)throws JSONException {JSONObject json = new JSONObject();for (Entry<String, Object> entry : map.entrySet()) {Object value = entry.getValue();if (value instanceof HashMap<?, ?>) {value = getJSONObject((HashMap<String, Object>) value);} else if (value instanceof ArrayList<?>) {value = getJSONArray((ArrayList<Object>) value);}json.put(entry.getKey(), value);}return json;}@SuppressWarnings("unchecked")private JSONArray getJSONArray(ArrayList<Object> list) throws JSONException {JSONArray array = new JSONArray();for (Object value : list) {if (value instanceof HashMap<?, ?>) {value = getJSONObject((HashMap<String, Object>) value);} else if (value instanceof ArrayList<?>) {value = getJSONArray((ArrayList<Object>) value);}array.put(value);}return array;}/*** 格式化一个json串*/public String format(String jsonStr) {try {return format("", fromJson(jsonStr));} catch (Throwable t) {t.printStackTrace();}return "";}@SuppressWarnings("unchecked")private String format(String sepStr, HashMap<String, Object> map) {StringBuffer sb = new StringBuffer();sb.append("{\n");String mySepStr = sepStr + "\t";int i = 0;for (Entry<String, Object> entry : map.entrySet()) {if (i > 0) {sb.append(",\n");}sb.append(mySepStr).append('\"').append(entry.getKey()).append("\":");Object value = entry.getValue();if (value instanceof HashMap<?, ?>) {sb.append(format(mySepStr, (HashMap<String, Object>) value));} else if (value instanceof ArrayList<?>) {sb.append(format(mySepStr, (ArrayList<Object>) value));} else if (value instanceof String) {sb.append('\"').append(value).append('\"');} else {sb.append(value);}i++;}sb.append('\n').append(sepStr).append('}');return sb.toString();}@SuppressWarnings("unchecked")private String format(String sepStr, ArrayList<Object> list) {StringBuffer sb = new StringBuffer();sb.append("[\n");String mySepStr = sepStr + "\t";int i = 0;for (Object value : list) {if (i > 0) {sb.append(",\n");}sb.append(mySepStr);if (value instanceof HashMap<?, ?>) {sb.append(format(mySepStr, (HashMap<String, Object>) value));} else if (value instanceof ArrayList<?>) {sb.append(format(mySepStr, (ArrayList<Object>) value));} else if (value instanceof String) {sb.append('\"').append(value).append('\"');} else {sb.append(value);}i++;}sb.append('\n').append(sepStr).append(']');return sb.toString();}}

login.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center_horizontal"><Buttonandroid:id="@+id/login_btn_renren"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="人人网授权登录" /></LinearLayout>

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Buttonandroid:id="@+id/main_get_userinfo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="获取用户信息" /><Buttonandroid:id="@+id/main_share_noUI"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享(无界面)" /><Buttonandroid:id="@+id/main_share_hasUI"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享(有界面)" /><Buttonandroid:id="@+id/main_btn_logout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="注销登录" /></LinearLayout>

show_info.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true" ><TextViewandroid:id="@+id/show_info_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="10dp"android:autoLink="all"android:textColor="#ff000000" /></ScrollView></RelativeLayout>

strings:

  <string name="share_content">测试使用shareSDK进行分享,感觉还不错,使用方便,功能强大!</string><string name="share">分享</string>

使用share SDK实现人人网授权登录分享(1.x版本)相关推荐

  1. 使用share SDK实现新浪微博授权登录分享(1.x版本)

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 操作步骤: 1.在share官网注册应用生成AppKey并下载SDK     网址:http://www.sh ...

  2. 使用share SDK实现腾讯微博授权登录分享(1.x版本)

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 操作步骤: 1.在share官网注册应用生成AppKey并下载SDK     网址:http://www.sh ...

  3. 有奖试读 使用share SDK实现腾讯微博授权登录分享(1.x版本)

    操作步骤: 1.在share官网注册应用生成AppKey并下载SDK     网址:http://www.shareSDK.cn 2.在腾讯微博平台注册应用生成AppId和AppKey    网址:h ...

  4. 解决QQ登录SDK不能网页授权登录的问题

    现象 QQ登录SDK在用户设备没有安装手机QQ客户端的情况下,默认是会调起网页授权的,但是可能是因为腾讯的某些限制,新申请的app_id都无法使用网页授权,打开后有些是跳转到下载手Q页面,有些是一直显 ...

  5. Android实现新浪微博SSO授权登录分享文字图片等功能(WEIBO_ANDROID_SDK V2.3.0 )

    新浪开发平台:http://open.weibo.com 新浪微博分享目前分为两种途径: 1,直接在自己的APP,弹出类似Dialog(sina集成)来完成授权,授权成功后可直接分享内容,全程都是在自 ...

  6. 微信网页-授权登录-分享-支付

    一个H5全部涉及,第一次使用,记录下来. 授权登录 1.需要一个公众号,正式没有可以去申请个测试的公众号,公众号后台授权管理配置授权回调域名. 2.jssdk提供了一个授权的地址,直接跳转过去即可 f ...

  7. 使用Share Sdk 实现第三方登录和分享

    导语:什么是ShareSDK? ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理 ...

  8. 全军尽墨的Android应用:社会化授权登录及分享安全漏洞

    随着微信微博等社会化媒体的火热,第三方登录迅速成为一种快捷注册的方式,社会化分享也成为一种知识快速传播的渠道.在移动端,几乎大多数应用都接入了第三方登录或者分享组件,尤其是微信.QQ.微博三大巨头.这 ...

  9. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

最新文章

  1. python3手机版下载-Python3中文版下载
  2. django 使用Ajax方式POST JSON数据包
  3. hdu 1254(dfs+bfs+优先队列)
  4. 小兔伴伴家庭动物园AR智能早教产品上市
  5. assoc_Ruby assoc()函数
  6. 结构类型需要重载GetHashCode和Equals
  7. 汇编学习--7.13--标志寄存器
  8. Linux下查看软件安装与安装路径
  9. 免费的Web压力测试工具
  10. java vm 参数及设置(转载)
  11. 系统重启-------即java代码重启tomcat!
  12. Python中URL的编码和解码:quote, unquote, urlencode
  13. rasa实现同义词替换
  14. android 系统wifi连接不上,安卓手机wifi连不上的处理操作
  15. 解决Typora图片显示不出来问题
  16. psf2otf函数的解释
  17. 域名进行实名认证需要提交什么资料?
  18. 西电计组实验一 存储器实验
  19. 新品上市 | “电子表格软件”轻装上阵,企业报表用户的新选择
  20. 如何使用Sklearn生成自己的数据集

热门文章

  1. STM32+RTThread串口不定长接收
  2. 预乘Alpha的作用
  3. C语言关键字之voliate
  4. ERROR:DOOP_CONF_DIR set. Please specify it either in yarn-env.cmd or in the environment./vue
  5. Flink SQL:Queries(Windowing TVF)
  6. 中彩室体彩排列5中奖王 v2.01 下载
  7. linux查看 tcp连接对应的程序,轻轻松松查看TCP连接及发起程序
  8. JavaScript 中的 setTimeout 和 setInterval 方法
  9. 玄铁RISC-V处理器软件生态
  10. 高精度电压源在半导体激光器测试中的应用