前言: 
对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享;

各大开放平台注册账户获取AppKey和AppSecret 
Mob开放平台地址:http://www.mob.com/#/index 
QQ开放平台地址:http://open.qq.com/ 
新浪微博开放平台地址:http://open.weibo.com/ 
微信开放平台地址:https://open.weixin.qq.com/ 
百度开放平台地址:http://apps.bdimg.com/

注: 
一、关于各大开放平台的开发者用户注册和创建应用获取AppKey、AppSecret我就不多说了,对于大家来说这都so easy; 
二、Eclipse在创建应用填写包名应该是manifest里面的packpage: 
 
studio的则是build.gradle里面的applicationId: 
 
一般情况下,studioapplicationIdmanifest下的包名是一致的,但是applicationId是手动改变的,所以注意在创建应用的时候,要使用applicationId

新浪微博第三方登录实现:

在做新浪微博第三方登录的时候,参考他们的api文档,感觉他们的api文档写的特别的乱,并且下载的Demo运行还报错,以至于浪费了我大半天的时间,去网上搜了几篇关于第三方登录的文章,写的并不全,时代也比较久远,并且基本没有相关Demo下载,有的就是拷贝的新浪微博的开放平台的原文,我也是醉了….. 
由于时间比较紧迫,所以并没有再继续深究下去。大家应该都知道有许多平台把例如分享、登录等功能集成好了,实现功能十分简单,这一次我是利用的Mob移动开发平台http://www.mob.com/#/index 实现的新浪微博第三方登录,感觉还不错实现起来比较简单。

一、下载Mob平台的SDK 
首先下载SDK,得到我们需要的资源

SDK地址(http://www.mob.com/#/downloadDetail/ShareSDK/android),下载下来发现无法解压(你们可以试一下),联系他们客服,他们说:上传错误,就给我发了一个。我把它和我的Dmeo放在一起,可供下载。 
找到ShareSDK for Android包下的QuickIntegrater.jar文件双击: 

感觉还不错,各大平台都有,只需要选择新浪微博就可以(我感觉还是没包装过的比较好,所以另外三种登录方式没采用这种方法),解压之后生成一个Sample文件: 

我们需要把里面的东西全部拿到我们的studio项目中,libs、res和src里面的全部拷贝复制就可以,studio新建assets的方法和Eclipse不一样,所以给大家发个图: 

点击创建就可以了,再把assets下的ShareSDK.xml拷贝就去;

其次配置ShareSDK 
把ShareSDK拷贝进去之后,我们需要把ShareSDK.xml文件中关于Mob(ShareSDK)和新浪微博(SinaWeibo)的Appkey、AppSecret和RedirectUrl替换成我们申请的值,如下图: 

把红箭头中的ShareSDK中的AppKey换成我们在Mob后台申请的AppKey; 
红框框中的SinaWeibo中的AppKey、AppSecret和RedirectUrl换成我们在新浪微博后台申请的对应的值; 
RedirectUrl这个字段的值就是我们后台项目中的应用信息——>高级信息——>OAuth2.0 授权设置中的授权回调页这个字段,需要我们填写一个有效的地址就可以,例如下图:


注:如果RedirectUrl这个字段不填或填写不对会报以下错误: 

二、配置AndroidManifest.xml 
添加activity信息

<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>

二、添加代码

首先是Mob的授权,在程序的入口处添加授权代码:

//Mob平台授权
ShareSDK.initSDK(this);

其次直接调用thirdSinaLogin()方法就可以了:

 
//-----------------------------------------------------新浪微博授权相关--------------
/** 新浪微博授权、获取用户信息页面 */
private void thirdSinaLogin() {
//初始化新浪平台
Platform pf = ShareSDK.getPlatform(MainActivity.this, SinaWeibo.NAME);
pf.SSOSetting(true);
//设置监听
pf.setPlatformActionListener(MainActivity.this);
//获取登陆用户的信息,如果没有授权,会先授权,然后获取用户信息
pf.authorize();
}
/** 新浪微博授权成功回调页面 */
@Override
public void onComplete(Platform platform, int action, HashMap<String, Object> hashMap) {
/** res是返回的数据,例如showUser(null),返回用户信息,对其解析就行
* http://sharesdk.cn/androidDoc/cn/sharesdk/framework/PlatformActionListener.html
*
*/
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = ;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
/** 取消授权 */
@Override
public void onCancel(Platform platform, int action) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = ;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
/** 授权失败 */
@Override
public void onError(Platform platform, int action, Throwable t) {
t.printStackTrace();
t.getMessage();
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = ;
msg.arg2 = action;
msg.obj = t;
UIHandler.sendMessage(msg, this);
} @Override
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MSG_TOAST: {
String text = String.valueOf(msg.obj);
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
break;
case MSG_ACTION_CCALLBACK: {
switch (msg.arg1) {
case : {
// 成功, successful notification
//授权成功后,获取用户信息,要自己解析,看看oncomplete里面的注释
//ShareSDK只保存以下这几个通用值
Platform pf = ShareSDK.getPlatform(MainActivity.this, SinaWeibo.NAME);
Log.e("sharesdk use_id", pf.getDb().getUserId()); //获取用户id
Log.e("sharesdk use_name", pf.getDb().getUserName());//获取用户名称
Log.e("sharesdk use_icon", pf.getDb().getUserIcon());//获取用户头像
mThirdLoginResult.setText("授权成功"+"\n"+"用户id:" + pf.getDb().getUserId() + "\n" + "获取用户名称" + pf.getDb().getUserName() + "\n" + "获取用户头像" + pf.getDb().getUserIcon());
//mPf.author()这个方法每一次都会调用授权,出现授权界面
//如果要删除授权信息,重新授权
//mPf.getDb().removeAccount();
//调用后,用户就得重新授权,否则下一次就不用授权
}
break;
case : {
mThirdLoginResult.setText("登录失败");
}
break;
case : {
// 取消, cancel notification
mThirdLoginResult.setText("取消授权");
}
break;
}
}
break;
case MSG_CANCEL_NOTIFY: {
NotificationManager nm = (NotificationManager) msg.obj;
if (nm != null) {
nm.cancel(msg.arg1);
}
}
break;
}
return false;
}

最后退出登录

 Platform mPf = ShareSDK.getPlatform(MainActivity.this, SinaWeibo.NAME);
//如果要删除授权信息,重新授权
mPf.getDb().removeAccount();

到这里关于新浪微博第三方登录的就基本结束了,我们获取到了用户的id、昵称、头像地址等信息,使用唯一值id再结合自己服务器的接口,便可实现第三方登录了.效果图如下: 
 
 

注意:如果你想修改授权的登录页面,可以参考 
这个链接里面的第11条

QQ第三方登录实现:

注意 
一、我不建议大家去看QQ开放平台关于获取个人信息那部分的文档,因为他们的文档已经过时了,我当时按照文档做过,但是一直报错,后来问客服,他告诉我他们的文档它久远了,已经不能用了<当时我就醉了、、>,而是给了我一份Demo,我会把Demo放在里面供大家下载。 
二、大家使用的测试机一定要是自动获取的网络时间,否则得不到信息,并且也没有错误信息,我研究了半天的时间,也没找到到底为什么,一问客服才知道,服务器时间和请求时间戳要相同才可以<我又是醉了、、、>。 
三、大家要打包APP再进行测试。

QQ第三方登录的步骤分为: 
1.先登录成功获取token和openid 
2.再通过token和openid获取用户的信息。

一、导入SDK的jar文件 
把这两个jar文件导入项目中 

二、配置AndroidManifest

<!-- QQ第三方登录相关       开始 -->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencent你的APPId" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
<!-- QQ第三方登录相关结束 -->

scheme这个字段输入你申请的appid,tencent不要删掉。

三、添加代码 
首先在程序入口添加:

Tencent mTencent = Tencent.createInstance(你的AppId, this.getApplicationContext());

剩下的调用loginQQ方法便可以:

/** ------------------------QQ第三方登录-------------------- */
public void loginQQ(){
/** 判断是否登陆过 */
if (!mTencent.isSessionValid()){
mTencent.login(this, "all",loginListener);
}/** 登陆过注销之后在登录 */
else {
mTencent.logout(this);
mTencent.login(this, "all",loginListener);
}
}
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
initOpenidAndToken(values);
updateUserInfo();
}
};
/** QQ登录第二步:存储token和openid */
public static void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch(Exception e) {
}
}
/** QQ登录第三步:获取用户信息 */
private void updateUserInfo() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {
Message msg = new Message();
msg.obj = "把手机时间改成获取网络时间";
msg.what = ;
mHandler.sendMessage(msg);
} @Override
public void onComplete(final Object response) {
Message msg = new Message();
msg.obj = response;
msg.what = ;
mHandler.sendMessage(msg);
}
@Override
public void onCancel() {
Message msg = new Message();
msg.obj = "获取用户信息失败";
msg.what = ;
mHandler.sendMessage(msg);
}
};
mInfo = new UserInfo(this, mTencent.getQQToken());
mInfo.getUserInfo(listener);
} else { }
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
/** 获取用户信息成功 */
if (msg.what == ) {
JSONObject response = (JSONObject) msg.obj;
if (response.has("nickname")) {
try {
log("获取用户信息成功,返回结果:"+response.toString());
mThirdLoginResult.setText("登录成功\n"+"用户id:"+openid+"\n昵称:"+response.getString("nickname")+"\n头像地址:"+response.get("figureurl_qq_1"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}else if(msg.what == ){
mThirdLoginResult.setText(msg+"");
}else if(msg.what == ){
mThirdLoginResult.setText(msg+"");
}
} };
/** QQ登录第一步:获取token和openid */
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
if (null == response) {
mToast("登录失败");
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == ) {
mToast("登录失败");
return;
}
log("QQ登录成功返回结果-" + response.toString());
doComplete((JSONObject)response);
}
protected void doComplete(JSONObject response) {}
@Override
public void onError(UiError e) {
Util.toastMessage(MainActivity.this, "onError: " + e.errorDetail);
Util.dismissDialog();
}
@Override
public void onCancel() {
Util.toastMessage(MainActivity.this, "onCancel: ");
Util.dismissDialog();
if (isServerSideLogin) {
isServerSideLogin = false;
}
}
}
/** -------------------------QQ第三方登录结束-------------------- */

代码有注释,大家看一下应该很容易明白。

QQ可以获得以下相关信息: 
大家只要response.getString(“字段名”)就可以得到数据了:

{
"is_yellow_year_vip": "",
"ret": ,
"figureurl_qq_1": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
"figureurl_qq_2": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"nickname": "小罗",
"yellow_vip_level": "",
"msg": "",
"figureurl_1": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "",
"level": "",
"figureurl_2": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"is_yellow_vip": "",
"gender": "男",
"figureurl": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}

最后退出登录:

mTencent.logout(this);

给大家看一下截图: 

微信第三方登录 
微信平台还是做得挺不错的,大家可以看一下他们的文档,只不过我们需要自己写网络请求(衰衰衰衰衰)

微信第三方登录分为: 
1.获取code 
2.根据code获取token 
3.根据token获取用户信息 
在第二、三步需要我们自己去写网络请求,我也是醉了。。。。

一、导入SDK的libammsdk.jar文件,我就不多说了 
二、配置AndroidManifest 
在你的build.gradle的applicationId相应目录下新建一个wxapi目录,在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序build.gradle的applicationId为com.aohuan.jinghai_lifee,则新添加的类如下图所示) 

并在manifest文件里面加上exported属性,设置为true,例如:

<activity
android:name="com.aohuan.jinghai_lifee.wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name" >
</activity>

三、添加代码

 
/** -------------------------微信第三方登录---------------------- */
/**
*
* 微信平台应用授权登录接入代码示例
*
* */
private void regToWx(){
// 通过WXAPIFactory工厂,获得IWXAPI的实例
api = WXAPIFactory.createWXAPI(MainActivity.this, AllApk.WEIXIN_APP_ID, true);
// 将应用的appid注册到微信
api.registerApp(AllApk.WEIXIN_APP_ID);
}
//获取微信访问getCode
private void getCode(){
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "carjob_wx_login";
api.sendReq(req);
}
/** -------------------------微信第三方登录结束-------------------- */

首先在onCreate()方法里面调用regToWx()方法实现微信平台的注册; 
其次第一步获取code 
调用getCode()方法发送获取code的请求,接受code则是在WXEntryActivity这个类里面的onResp(): 

第二步使用AsyncTask获取token: 

/** 微信登录第二步:获取token */
class AsynctaskToken extends AsyncTask<Object , Object , Object> {
@Override
protected Object doInBackground(Object... params) {
HttpGet httpRequest = new HttpGet(params[].toString());
try{
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
BaseActivity.log("请求个人信息成功");
String strResult = EntityUtils.toString(httpResponse.getEntity());
return strResult;
}
else{
BaseActivity.log("请求个人信息失败");
return "请求出错";
}
}
catch(ClientProtocolException e){
}
catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Object obj = null;
try {
obj = JsonUtil.toObjectByJson(o.toString(), WeiXinLoginGetTokenBean.class);
} catch (IOException e) {
e.printStackTrace();
}
WeiXinLoginGetTokenBean bean = (WeiXinLoginGetTokenBean)obj;
BaseActivity.log("获取token成功:\n" + "token:"+bean.getAccess_token()+"\nopenid"+bean.getOpenid());
String url = "https://api.weixin.qq.com/sns/userinfo?"+"access_token="+bean.getAccess_token()+"&openid="+bean.getOpenid();
new AsynctaskInfo().execute(url);
}
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
}
}

第三步获取用户信息:

/** 微信登录第三步:获取用户信息 */
class AsynctaskInfo extends AsyncTask<Object , Object , Object> {
@Override
protected Object doInBackground(Object... params) {
HttpGet httpRequest = new HttpGet(params[].toString());
try{
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
BaseActivity.log("请求个人信息成功");
String strResult = EntityUtils.toString(httpResponse.getEntity());
return strResult;
}
else{
BaseActivity.log("请求个人信息失败");
return "请求出错";
}
}
catch(ClientProtocolException e){
}
catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Object obj = null;
try {
obj = JsonUtil.toObjectByJson(o.toString(), WeiXinLoginGetUserinfoBean.class);
} catch (IOException e) {
e.printStackTrace();
}
WeiXinLoginGetUserinfoBean bean = (WeiXinLoginGetUserinfoBean)obj;
BaseActivity.log("获取用户信息成功:\n" + "昵称:"+bean.getNickname()+"\n头像路径"+bean.getHeadimgurl());
Toast.makeText(mContext,"获取用户信息成功:\n"+"昵称:"+bean.getNickname() + "\n头像路径:"+bean.getHeadimgurl(),Toast.LENGTH_LONG).show();
finish();
}
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
}
}

微信第三方登录就结束了,相对来说不算太复杂: 

注:测试微信登录的时候,也需要打包测试,否则得不到数据;

百度第三方登录 
百度第三方登录,相对来说就比较简单了

第一步:导入Baidu-Frontia-Full-Debug-2.0.6.jar包 

第二步:配置AndroidManifest.xml 

添加android:name=”com.baidu.frontia.ForntiaApplication”

第三步:添加代码 
在程序入口初始化Fronta”

Frontia.init(this.getApplicationContext(),你的AppKey);

注册百度:

//注册百度
FrontiaAuthorization mAuthorization = Frontia.getAuthorization();

主要代码直接调用baiduLogin()方法就可以:

/**
* 百度第三方登录相关
*/
protected void baiduLogin() {
ArrayList<String> scope = new ArrayList<String>();
scope.add(Scope_Basic);
scope.add(Scope_Netdisk);
mAuthorization.authorize(this, FrontiaAuthorization.MediaType.BAIDU.toString(), scope, new FrontiaAuthorizationListener.AuthorizationListener() {
@Override
public void onSuccess(FrontiaUser result) {
if (null != mThirdLoginResult) {
mThirdLoginResult.setText("social id: " + result.getId() + "\n" + "token: " + result.getAccessToken() + "\n" + "expired: " + result.getExpiresIn());
}
}
@Override
public void onFailure(int errCode, String errMsg) {
if (null != mThirdLoginResult) {
mThirdLoginResult.setText("errCode:" + errCode + ", errMsg:" + errMsg);
}
}
@Override
public void onCancel() {
if (null != mThirdLoginResult) {
mThirdLoginResult.setText("cancel");
}
}
});
}

退出登录调用baiduExit()方法就可以:

/**
* 百度第三方退出相关
*/
protected void baiduExit() {
boolean result = mAuthorization.clearAuthorizationInfo(FrontiaAuthorization.MediaType.BAIDU.toString());
if (result) {
mThirdLoginResult.setText("百度退出成功");
} else {
mThirdLoginResult.setText("百度退出失败");
}
}

百度登录,挺简单的吧 

1.四种登录方式已经整理好了,如果有什么地方写错了或者漏掉的,请查看我的Demo或者提出来。 
2.由于这是第一次写博客,所以肯定有写的不好的地方,大家有什么意见可以提出来,相互交流沟通,共同进步。 
3.由于我的源代码里面涉及到客户的信息,所以AppKey、AppSecret等信息,被我删掉了,如果想看我的Demo效果,需要修改小部分我的代码: 
第一:把我com.aohuan.jinghai_lifee.wxapi换成你的applicationId(对应的包名).wxapi 

第二:修改ShareSDK.xml里面对应的信息: 
 
第三:修改manifest.xml里面对应的信息: 

第四:修改AllApk里面对应的信息: 

这样就可以了!!!

Android 实现QQ、微信、新浪微博和百度第三方登录的更多相关文章

  1. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...

  2. Android 高仿微信即时聊天 百度云为基础的推

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天最终有幸利用百 ...

  3. 常用分享功能.超级简单,qq 微信 新浪微博分享

    <div id="share"> <a href="javascript:void(0)" share-type="qzone&qu ...

  4. Android 仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后进入应 用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  5. Android仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后 进入应用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  6. 带三方登录(qq,微信,微博)

    实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言:  对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于 ...

  7. 【Demo】QQ,github,微博第三方社交登录

    本文主要讲解 集成 第三方社交账号登录 为什么会有这个需求? 主要是因为目前互联网的网站数量太多,如果在各个站点都注册一个账号 用户非常不容易记住每个账号的用户名和密码,并且非常难保证每个账号的密码足 ...

  8. Oauth2.0 QQ&微信&微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

  9. 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

    使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...

随机推荐

  1. Android框架-Volley(一)

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  2. python 中的property

    """ property() 的第一个参数是 getter 方法,第二个参数是 setter 方法 xx = property(a,b) @property #用于指示g ...

  3. BZOJ 3637: Query on a tree VI LCT_维护子树信息_点权转边权_好题

    非常喜欢这道题. 点权转边权,这样每次在切断一个点的所有儿子的时候只断掉一条边即可. Code: #include <cstring> #include <cstdio> #i ...

  4. NodeJS学习笔记 (28)流操作-stream(ok)

    模块概览 nodejs的核心模块,基本上都是stream的的实例,比如process.stdout.http.clientRequest. 对于大部分的nodejs开发者来说,平常并不会直接用到str ...

  5. [笔记-统计学习方法]感知机模型(perceptron) 原理与实现

    前几天认把感知机这一章读完了,顺带做了点笔记 现在把笔记做第三次的整理 (不得不说博客园的LaTex公式和markdown排版真的不太舒服,该考虑在服务器上建一个博客了) 零.总结 适用于具有线性可分 ...

  6. MySql系列之单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  7. 紫书 例题 10-10 UVa 10491(概率计算)

    公式很好推,表示被高中生物遗传概率计算虐过的人 这个公式简直不需要动脑 #include<cstdio> using namespace std; int main() { double ...

  8. C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)

    其原理是,利用winfrom模拟表单提交数据.将要提交的參数提交给网页,网页运行代码.得到数据.然后Winform程序将网页的全部源码读取下来.这样就达到windows应用程序和web应用程序之间传參 ...

  9. hdu 思维风暴

    点击打开链接 偶然在杭电上看到的题目,数学题.好像是一道六年级奥赛题目,反正我是没有想出来,也知道往那上面想.就是找不到规律啊.学习了网上的方法, 这道题须要求出来多添加的点,就是与之前每条边添加的点 ...

  10. DevExpress控件的安装及画图控件的使用

    近期须要绘制纵断面图,而AE自带的又不是非常好,查找资料后使用DevExpress控件中的画图控件实现了纵断面的绘制.Dev控件是须要付费的.这里我们使用破解版的哈. 安装包及破解文件上传至我的网盘了 ...