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

操作步骤:

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

2、在腾讯微博平台注册应用生成AppId和AppKey    网址:http://dev.t.qq.com

3、导入SDK包。只实现腾讯微博授权登录分享的话只需要导入ShareSDK-Core.jar(核心包)、ShareSDK-TencentWeibo.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" --><TencentWeiboAppKey="801307650"AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"Id="1"RedirectUri="http://sharesdk.cn"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.microblog"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.microblog.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.microblog.MainActivity" /><activity android:name="com.home.microblog.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.microblog;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.tencent.weibo.TencentWeibo;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);logionBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {AbstractWeibo weibo = AbstractWeibo.getWeibo(LoginActivity.this, TencentWeibo.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.microblog;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.tencent.weibo.TencentWeibo;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,TencentWeibo.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,TencentWeibo.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.microblog;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.microblog;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();}}

strings:

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

login.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical" ><Buttonandroid:id="@+id/login_btn"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>

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

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

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

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

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

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

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

  4. 腾讯微博授权登陆超简单示例(源自官方Demo)

    本人初学乍练 有什么不合适的地方欢迎大家踊跃吐槽 首先参考官方API文档 了解腾讯微博Oauth2.0形式的授权过程 这次主要将的是(code模式)方式的鉴权 [url]http://wiki.ope ...

  5. 使用Oauth2.0实现微博授权登录

    本文章参考资料: http://blog.csdn.net/highboys/article/details/52139268 http://blog.csdn.net/yypsober/articl ...

  6. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

  7. c语言微博创建转发和删除源代码,[转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码...

    1.新浪微博:http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空) &url=将页 ...

  8. iOS微博授权登录及获取用户数据的方法

    前言: 平时 在开发一个app应用时,往往 为了考虑用户体验以及防治用户的流失,都需要给应用添加第三方授权登录的功能.下面给大家说一下两种实现授权登录以及请求微博openAPI的方法. 第一种方法:使 ...

  9. Android接入微信SDK之一:发起微信授权登录

    1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...

最新文章

  1. 【视频】V4L2之ioctl
  2. 深入浅出统计学 第二三章 量度
  3. 计算机应用基础2016高起专,计算机应用基础-2016年秋季《计算机应用基础(高起专)》期末考核(20210407163441).pdf...
  4. mysql主从同步配置超详细_MySQL主从同步配置
  5. 资源权限操作-查询所有资源权限
  6. Java 数据类型和 MySql 数据类型对应一览表
  7. ToString函数用法
  8. UNIX环境高级编程 第11章 线程
  9. json标准格式举例_JSON格式简介及一些对应函数
  10. 各类编程视频教程资源
  11. busybox内置tftpd服务器配置
  12. 2019浙江ACM省赛部分题解-ABDEFGHIJK
  13. 网络兼容性是什么意思
  14. FreeRTOS原理剖析:空闲任务分析
  15. 非常详细的微信跳一跳“黑科技”脚本
  16. Java8函数式编程之一: 行为参数化
  17. DJ9-3 DMA 方式
  18. 缓解职场压力和心理疲劳
  19. 【Shader】图集UV错乱问题支持MeshRenderer显示图集图片
  20. 深度学习平台——PaddleCloud简介

热门文章

  1. 物通博联·工业智能PLC物联网网关
  2. PyQt5 简单范例
  3. 有底气,这样应对面试官的问题!
  4. Snyk 依赖性安全漏洞扫描工具
  5. 【转载】官方最完整版:张小龙微信公开课超时演讲,总结微信8年
  6. CSS设置盒子容器(div)高度(height)始终为100%
  7. PyTorch1.9.1 GPU版本安装(python3.8+pyTorch1.9.1, torch1.9.1/cu111 + torchvision0.10.1/cu111)
  8. 爬了杭州的租房数据,原来……
  9. FBX格式mesh解析与加载(一)
  10. DNS的正向解析,反向解析以及双向解析