先想闭着眼睛做加法,结果要加入的模块越来越多。看来改代码是必然的啦。
再想做减法,也没有完全的把握,不如退而结网,把代码看明白。看了代码以后,确定做减法是可行的。
== 以最简单的login为例,从task出发
com.ch_linghu.fanfoudroid.LoginActivity.LoginTask._doInBackground(TaskParams...)
user= TwitterApplication.mApi.login(username, password);
== 进入weibo模块
com.ch_linghu.fanfoudroid.fanfou.Weibo.login(String, String)
http.setCredentials(username, password);// 保存id/password到httpclient
User user = verifyCredentials();
// 发送请求,返回User对象
com.ch_linghu.fanfoudroid.fanfou.Weibo.verifyCredentials()
return new User(get(getBaseURL() + "account/verify_credentials.json"
, true).asJSONObject());
get的输入参数就是fanfou检验用户名密码是否正确的路径:
http://api.fanfou.com/account/verify_credentials.[json|xml]
// 调用httpClient.Get 返回respond
com.ch_linghu.fanfoudroid.fanfou.Weibo.get(String, boolean)
return get(url, null, authenticate);
com.ch_linghu.fanfoudroid.fanfou.Weibo.get(String, ArrayList<BasicNameValuePair>, boolean)
return http.get(url, authenticated);
== 进入httpClient:req/rsp
// 初始化,对于http还有不少不明白,只是简单地概述了一下
public HttpClient() {
prepareHttpClient();
// 关于连接
设置最大连接数 10
设置http版本 1.1
设置http:80,https:443
把上述设置保存在param里,创建DefaultHttpClient
mClient = new DefaultHttpClient(cm, params);
支持gzip
// 关于认证
设置basic auth
mAuthScope
(m)localcontext
// Interceptor==拦截,preemptive=先发制人
mClient.addRequestInterceptor(preemptiveAuth, 0);
private static HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor()
用来预处理处理http的request?
// 发送指令
com.ch_linghu.fanfoudroid.http.HttpClient.get(String, boolean)
return httpRequest(url, null, authenticated, HttpGet.METHOD_NAME);
com.ch_linghu.fanfoudroid.http.HttpClient.httpRequest(String, ArrayList<BasicNameValuePair>, File, boolean, String)
method = createMethod(httpMethod, uri, file, postParams);
// Setup ConnectionParams, Request Headers
SetupHTTPConnectionParams(method);
// Execute Request
// 因为是同步协议,现在响应已经收到
response = mClient.execute(method, localcontext);
res = new Response(response);
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode(); // 处理状态 当响应码不为200时都会报出此异常:
// It will throw a weiboException while status code is not 200
HandleResponseStatusCode(statusCode, res);
// 返回respond
return res;
== 通用respond(json) ---> 业务数据(user)
// 发送请求
com.ch_linghu.fanfoudroid.fanfou.Weibo.verifyCredentials()
return new User(get(getBaseURL() + "account/verify_credentials.json"
, true).asJSONObject());
com.ch_linghu.fanfoudroid.fanfou.User.User(JSONObject)
init(json);
com.ch_linghu.fanfoudroid.fanfou.User.init(JSONObject)
id = json.getString("id");
name = json.getString("name");
.....
再看看业务数据怎么显示到界面上?
== 以首页TweetActivity为例,还是从Task出发,发送请求
com.ch_linghu.fanfoudroid.ui.base.TwitterCursorBaseActivity.RetrieveTask._doInBackground(TaskParams...)
String maxId = fetchMaxId();
statusList = getMessageSinceId(maxId);
上面2个方法都是abstract
取出当前页(TYPE_HOME)的最大id
com.ch_linghu.fanfoudroid.TwitterActivity.fetchMaxId()
return getDb().fetchMaxTweetId(getUserId(), StatusTable.TYPE_HOME);
已知消息id,查询时间线
com.ch_linghu.fanfoudroid.TwitterActivity.getMessageSinceId(String)
return getApi().getFriendsTimeline(new Paging(maxId));
return getApi().getFriendsTimeline();
访问weibo, 返回List<Status>
com.ch_linghu.fanfoudroid.fanfou.Weibo.getFriendsTimeline(Paging)
return Status.constructStatuses(get(getBaseURL() + "statuses/friends_timeline.json",null, paging, true));
== Task处理响应
// List<Status> ===〉ArrayList<Tweet>
com.ch_linghu.fanfoudroid.ui.base.TwitterCursorBaseActivity.RetrieveTask._doInBackground(TaskParams...)
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
for (com.ch_linghu.fanfoudroid.fanfou.Status status : statusList)
tweets.add(Tweet.create(status));
mRetrieveCount = addMessages(tweets, false); // 又是abstract
// ArrayList<Tweet> ===〉dbcom.ch_linghu.fanfoudroid.TwitterActivity.addMessages(ArrayList<Tweet>, boolean)
for (Tweet t : tweets)
getDb().createWeiboUserInfo(t.user);
return getDb().putTweets(tweets, getUserId(), StatusTable.TYPE_HOME, isUnread);
后续应该会同步db和listView吧?
com.ch_linghu.fanfoudroid.ui.base.TwitterCursorBaseActivity.RetrieveTask._doInBackground(TaskParams...)
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
for (com.ch_linghu.fanfoudroid.fanfou.Status status : statusList)
tweets.add(Tweet.create(status));
mRetrieveCount = addMessages(tweets, false); // 又是abstract
// ArrayList<Tweet> ===〉dbcom.ch_linghu.fanfoudroid.TwitterActivity.addMessages(ArrayList<Tweet>, boolean)
for (Tweet t : tweets)
getDb().createWeiboUserInfo(t.user);
return getDb().putTweets(tweets, getUserId(), StatusTable.TYPE_HOME, isUnread);
后续应该会同步db和listView吧?
No comments:
Post a Comment