前言
记录一下自己的学习练习记录,利用一些时间写了这个仿微博,其实一开始是要写一个仿网易音乐的,结果找不到一个音乐接口啊,只好选择了微博来练手,戏剧性的是写了一半的时候,我就找到了音乐接口,笑cry,这里也推荐给大家这个API集合,很多你想用的接口里边都有,音乐,视频,数学,机器学习,购物健身娱乐什么的,有兴趣可以收藏下来慢慢玩。
有兴趣和我一试的friends。。
- 从这个项目里可以复习Android几乎所有基础知识,也可以作部分控件和库使用方法的一个小简介。
- 代码不是结构很严谨的那种,但是很容易看懂实现过程,我会继续努力的,大神们务必留下指点
- 未使用官方SDK开发,想自己把所有套路摸一遍再去看官方的,能更好的知道怎样更好的去实现
开篇
开发前的准备
这里整理了一张开发流程图
第一步,当然是跑去微博开放平台申请开发者账号,新浪这个网页有个坑,就是你很可能点登录登不上(它会没有任何反应的。。),这时候你就需要先去微博首页登录你的微博账号,然后再回到开放平台首页刷新一下页面就登录成功了。登陆成功以后,微链接–>立即创建–>移动应用,填好信息后点击创建,网页反应可能有些慢,稍等就会显示创建成功。此时会跳到应用信息界面,在这个页面我们要获得到App Key和App Secret两个参数的信息,接下来我们要做微博的授权,所以顺带把相关信息填写好,高级信息–>授权回调页,两项我们都填成一样的即可,在这里我填的是百度的首页,这里有第二个坑万万别踩。。。就是回调地址千万不要填写新浪网,其他都可以,否则后续你将得不到你要的信息,其他我们可以暂时不填,到之后用的时候再去填写。OAuth2 授权
在文档–>API文档中,可以找到关于OAuth2授权的文档。这里微博也为我们提供了一个很好的API测试工具,但是在授权之前我们还用不着。之后可以使用。从文档我们需要看的信息有,首先是请求的URL。其次,很重要的就是请求的方式。再有就是请求参数,在表格里,属性为true的是必选属性,在这里我们要传递两个参数,可以从说明中看到是刚刚获取到的APPKEY和填写的授权回调地址,授权回调地址在这里,就是在授权完成返回结果的时候,可以从中获取到返回的参数所使用的。示例里使用了Get请求方法。123456789101112131415161718192021222324252627282930313233343536//请求https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code//同意授权后会重定向http://www.example.com/response&code=CODE```这里我网络请求使用了OkHttp,get请求直接访问URL,将参数直接加在URL后边(多个参数用&连接),直接访问即可。POST方法后续介绍使用方法。这里我们可以开始 请求OAuth授权 ,我使用了一个WebView来加载授权页面,```JAVAfinal WebView webView = (WebView) findViewById(R.id.webView);//管理WebViewWebSettings webSettings = webView.getSettings();//启用JavaScript调用功能webSettings.setJavaScriptEnabled(true);//启用缩放网页功能webSettings.setSupportZoom(true);//获取焦点webView.requestFocus();RequestParams params = new RequestParams();String url1 = params.put(Constants.APP_KEY, Constants.REDIRECT_URL);webView.loadUrl(url1);//WebViewClient主要帮助WebView处理各种通知、请求事件webView.setWebViewClient(new WebViewClient() {@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);System.out.println("kaishi");if (url.startsWith(Constants.REDIRECT_URL)) {String code = url.split("=")[1];System.out.println("code is " + code);requestmsg(code);}}});
这样当回调页面时候,就可以从其网页URL中截取出code的值,以供下一步获取其他值使用。
接下来我们就要拿着code去 获取授权 以得到access_token了。打开相关文档,依旧是首先查看重点三项,URL,请求方式,请求参数,这次用到了POST请求。
OkHttp使用方法(包含maven使用)
Okhttp的post请求。这里我们来简介一下okhttp的用法。首先要添加它的依赖,在这里,我们可以去maven仓库去寻找我们需要使用的第三方库。百度maven repository即可。搜索到结果以后,在下方众多版本里,选择使用人数最多的办版本,一般都不会出错。这里我们选择3.4.1版本。并复制他的依赖
我们需要删去group,name,version等标签和引号等,保留冒号,见如下格式
在app.gradle里添加,然后同步。
无论何种请求方式,我们都要先创建一个OkhttpClient实例。
然后,如果是get请求,我们只需要将处理准备好的URL直接进行访问和获取数据即可。
如果是post请求方式,那么我们则会多使用一个FormBody来放置参数。
将post请求需要的参数都以键值对的形式通过add方法添进formBody中。然后再使用Request发起请求传递
然后我们需要将返回的json数据封装成简单的实体类,返回的数据在new Callback() {···}的onresponse方法中获得和处理,这里说明,无论返回的数据是否正确,只要有返回,都会在onResponse中处理,onFailure中不用于返回数据不正确的情况。
这里我们可以将返回的数据封装成一个Token类。可以自己手动写,但是现今有工具就要学会使用嘛,往上很多json自动转换POJO的。我使用的是这个,正确格式的json串复制进去生成实体类就好。
获取json返回数据,首先
获取工作到这里就结束了,接下来我们就该开始做解析数据工作。这里我使用的是GSON
依旧去maven仓库找到它的依赖,添加到gradle中,我们就可以使用它解析数据了
接下来你要做的就是,使用Gson将它封装成实体类,代码如下
这样我们就完成了封装。
这些操作应该就很简单了很容易理解了。
其他的数据处理也是一样的操作。 下一篇中我们将获取解析好友微博。
源码地址,写练手项目博客不带完整源码的都是流氓(逃~