刚接触安卓,超级菜鸟一名,大牛勿喷。
看过使用开源项目Signpost来处理授权的代码,需要可以很容易实现OAuth的认证,但是不利于进一步熟悉安卓,还是自己来动手吧...
下载了一个新浪微博SDK的源码,看了demo和文档,新浪已经帮我们把所有的请求接口都封装好了,使用这些接口很快就实现了OAuth授权和读取最新微博的功能,而我们要做的更多的就是解析新浪微博返回的数据,这也没什么意思...
磕磕碰碰,决定山寨一个属于自己的新浪微博SDK,我还是认为即使是仿照别人的代码,当中也会有不少收获的。
主要的地方是在OAuthDialog类封装了webView,代码并不复杂,很好理解。
public class OAuthDialog extends Dialog {
String mUrl;
private WebView mWebView;
private RelativeLayout mContent;
private OAuthListener listener;
public OAuthDialog(Context context, String url, OAuthListener listener) {
super(context);
mUrl = url;
this.listener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContent = new RelativeLayout(getContext());
setUpWebView();
addContentView(mContent, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
}
private void setUpWebView() {
mWebView = new WebView(getContext());
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new OAuthDialog.WeiboWebViewClient());
mWebView.loadUrl(mUrl);
mWebView.setLayoutParams(new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
mWebView.setVisibility(View.INVISIBLE);
mContent.addView(mWebView);
}
class WeiboWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (url.startsWith(Weibo.redirect_uri)) {
Bundle bundle = utils.parseUrl(url);
listener.onComplete(bundle);
view.stopLoading();
OAuthDialog.this.dismiss();
return;
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.setVisibility(View.VISIBLE);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
}
}
}