最近程序用到腾讯微博和新浪微博,腾讯微博sdk还比较清晰,也比较适合直接用源码程序员的习惯,简单明了。
到了新浪微博,头都搞大了,先是找了个1.0授权的,结果一个月时间不到sina就宣布撤销1.0的授权,郁闷死我了,
然后又开始升级2.0授权...结果在各个环节都受到挫折。归根结底还是懒在作怪,连SDK的文档都不看就开始跑测试源码,
碰了一鼻子灰,相信这方面吃亏的人不少。
闲话少扯步入正题。首先去官网下载android最新sdk压缩包。包文件包括两个工程包com_weibo_android(库文件)
、com_weibo_android_example(测试工程)。
1、首先导入库文件com_weibo_android,然后右键工程-properties-android进入
勾选isLibray点击apply,确定。不了解库文件的先去了解下android库文件。 好这个工程导入完毕,不要运行它。
2、然后导入测试工程com_weibo_android_example,然后右键工程-properties-android进入
点击apply完成。 ok工程导入完成。
3、准备完成之后进入测试工程,进入AuthorizeActivity类,其他的没什么好说的,weibo.setRedirectUrl("http://www.sina.com");
这行代码写入回调页,这个是在自己申请的应用信息里面可以查到的。
其他的按照上面的注释添加就行,至此运行你的应用就可以实现授权了,哦别忘了添加测试账号哦,看上图有个测试账号。
4、因为需求只需要发表微博因此我的应用也只做到了发表微博这一节。其中在发表微博中利用sdk遇到了乱七八糟的问题,
比如不能重复利用accesstoken的问题,资料少没能解决,最后让我放弃了使用sdk发表微博,转而使用sina提供的api文档
这里需要什么就直接去查找访问接口了就是了,在这里提供一段代码做掩饰
HttpClient httpclient = BasicUtil.getNewHttpClient();//获取httpclient对象
HttpPost httpPost;
if(thisLarge==null){
StringBuffer request = new StringBuffer();
request.append("source="+getString(R.string.sina_app_consumer_key));//组装http请求字段
request.append("&access_token="+accesstoken);
request.append("&status="+BasicUtil.encodingUtf8(content.getText().toString()));
httpPost = new HttpPost("https://api.weibo.com/2/statuses/update.json");
StringEntity reqEntity;
try {
reqEntity = new StringEntity(request.toString().toString());
reqEntity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(reqEntity);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
MultipartEntity reqEntity = new MultipartEntity();
try {
StringBody source = new StringBody(getString(R.string.sina_app_consumer_key));
StringBody access_token = new StringBody(accesstoken);
StringBody status = new StringBody(BasicUtil.encodingUtf8(content.getText().toString()));
reqEntity.addPart("source", source);
reqEntity.addPart("access_token", access_token);
reqEntity.addPart("status", status);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
httpPost = new HttpPost("https://upload.api.weibo.com/2/statuses/upload.json");
FileBody file=null;
String Extensions = thisLarge.substring(thisLarge.lastIndexOf("."));
if(Extensions.equals(".jpg")||Extensions.equals(".jpeg")){
file = new FileBody(new File(thisLarge),"image/jpeg");
reqEntity.addPart("pic", file);
}else if(Extensions.equals(".png")){
file = new FileBody(new File(thisLarge),"image/x-png");
reqEntity.addPart("pic", file);
}else{
Message msg_listData = new Message();
msg_listData.what = Global_ConstantVar.MESSAGETYPE_SUCESS;
reponse = "只能上传jpeg、jpg、png格式的图片!!";
handler.sendMessage(msg_listData);
return;
}
httpPost.setEntity(reqEntity);
}
HttpResponse httpreponse;
try {
httpreponse = httpclient.execute(httpPost);
if (httpreponse.getStatusLine().getStatusCode() == 200) {
Message msg_listData = new Message();
msg_listData.what = Global_ConstantVar.MESSAGETYPE_SUCESS;
reponse = "评论发表成功!!";
handler.sendMessage(msg_listData);
return;
}else{
Message msg_listData = new Message();
msg_listData.what = Global_ConstantVar.MESSAGETYPE_FAIL;
reponse = "新浪微博授权过期,请重新授权!!";
handler.sendMessage(msg_listData);
return;
}
}catch (IOException e) {
// TODO Auto-generated catch block
Log.e("eeeeeeeeeeeee", e.toString());
}
}
if(!isSend2tencent&&!isSend2sina){
reponse = "请选择至少一种分享平台";
Message msg_listData = new Message();
msg_listData.what = Global_ConstantVar.MESSAGETYPE_SUCESS;
handler.sendMessage(msg_listData);
return;
}
Message msg_listData = new Message();
msg_listData.what = Global_ConstantVar.MESSAGETYPE_SUCESS;
handler.sendMessage(msg_listData);
}
至此发表微博就大功告成。
最后提醒几点,在途中你可能遇到httpclient访问不成功的情况,我忘了那个是什么异常了,如果你在测试中遇到问题
可以给我留言。其次expires_in这个字段是新浪返回给你的授权时间精确到秒,超过此时间你得重新授权。
好了新浪微博到此完毕。