/* * Copyright 2010 Renren, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.renren.api.connect.android; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import android.content.Context; import android.os.Bundle; import com.renren.api.connect.android.common.AbstractRequestListener; import com.renren.api.connect.android.exception.RenrenError; import com.renren.api.connect.android.feed.FeedHelper; import com.renren.api.connect.android.feed.FeedPublishRequestParam; import com.renren.api.connect.android.feed.FeedPublishResponseBean; import com.renren.api.connect.android.friends.FriendsGetFriendsRequestParam; import com.renren.api.connect.android.friends.FriendsGetFriendsResponseBean; import com.renren.api.connect.android.friends.FriendsGetRequestParam; import com.renren.api.connect.android.friends.FriendsGetResponseBean; import com.renren.api.connect.android.friends.FriendsHelper; import com.renren.api.connect.android.photos.AlbumCreateRequestParam; import com.renren.api.connect.android.photos.AlbumCreateResponseBean; import com.renren.api.connect.android.photos.AlbumGetRequestParam; import com.renren.api.connect.android.photos.AlbumGetResponseBean; import com.renren.api.connect.android.photos.PhotoHelper; import com.renren.api.connect.android.photos.PhotoUploadRequestParam; import com.renren.api.connect.android.photos.PhotoUploadResponseBean; import com.renren.api.connect.android.status.StatusHelper; import com.renren.api.connect.android.status.StatusSetRequestParam; import com.renren.api.connect.android.status.StatusSetResponseBean; import com.renren.api.connect.android.users.UsersGetInfoHelper; import com.renren.api.connect.android.users.UsersGetInfoRequestParam; import com.renren.api.connect.android.users.UsersGetInfoResponseBean; import com.renren.api.connect.android.view.RenrenAuthListener; /** * 对人人的请求封装成异步。注意:使用该类调用人人接口时,不能在Listener中直接更新UI控件。 * * @see Renren * @see RequestListener * * @author yong.li@opi-corp.com * */ public class AsyncRenren { private Renren renren; private Executor pool; public AsyncRenren(Renren renren) { this.renren = renren; this.pool = Executors.newFixedThreadPool(2); } /** * 退出登录 * * @param context * @param listener 注意监听器中不在主线程中执行,所以不能在监听器中直接更新UI代码。 */ public void logout(final Context context, final RequestListener listener) { pool.execute(new Runnable() { @Override public void run() { try { String resp = renren.logout(context); RenrenError rrError = Util.parseRenrenError(resp, Renren.RESPONSE_FORMAT_JSON); if (rrError != null) listener.onRenrenError(rrError); else listener.onComplete(resp); } catch (Throwable e) { listener.onFault(e); } } }); } /** * 调用 人人 APIs,服务器的响应是JSON串。 * * 人人 APIs 详细信息见 http://wiki.dev.renren.com/wiki/API * * @param parameters 注意监听器中不在主线程中执行,所以不能在监听器中直接更新UI代码。 * @param listener */ public void requestJSON(Bundle parameters, RequestListener listener) { request(parameters, listener, Renren.RESPONSE_FORMAT_JSON); } /** * 调用 人人 APIs 服务器的响应是XML串。 * * 人人 APIs 详细信息见 http://wiki.dev.renren.com/wiki/API * * @param parameters 注意监听器中不在主线程中执行,所以不能在监听器中直接更新代码。 * @param listener */ public void requestXML(Bundle parameters, RequestListener listener) { request(parameters, listener, Renren.RESPONSE_FORMAT_XML); } /** * 调用 人人 APIs。 * * 人人 APIs 详细信息见 http://wiki.dev.renren.com/wiki/API * * @param parameters * @param listener 注意监听器中不在主线程中执行,所以不能在监听器中直接更新UI代码。 * @param format return data format (json or xml) */ private void request(final Bundle parameters, final RequestListener listener, final String format) { pool.execute(new Runnable() { @Override public void run() { try { String resp = ""; if ("xml".equalsIgnoreCase(format)) { resp = renren.requestXML(parameters); } else { resp = renren.requestJSON(parameters); } RenrenError rrError = Util.parseRenrenError(resp, format); if (rrError != null) { listener.onRenrenError(rrError); } else { listener.onComplete(resp); } } catch (Throwable e) { listener.onFault(e); } } }); } /** * 异步方法<br> * 使用用户名和密码完成登陆和授权 <br> * * @see Renren.authorize * @param param * 请求对象 * @param listener * 登陆状态的监听器 */ public void authorize(PasswordFlowRequestParam param, RenrenAuthListener listener) { PasswordFlowHelper passwordFlowHelper = new PasswordFlowHelper(); passwordFlowHelper.login(pool, param, listener, renren); } /** * * @see Renren.uploadPhoto */ public void publishPhoto(final long albumId, final byte[] photo, final String fileName, final String description, final String format, final RequestListener listener) { pool.execute(new Runnable() { @Override public void run() { try { String resp = renren.publishPhoto(albumId, photo, fileName, description, format); RenrenError rrError = Util.parseRenrenError(resp, format); if (rrError != null) { listener.onRenrenError(rrError); } else { listener.onComplete(resp); } } catch (Throwable e) { listener.onFault(e); } } }); } /** * users.getInfo接口<br> * http://wiki.dev.renren.com/wiki/Users.getInfo * @see Renren.getUsersInfo * * @param param * 请求参数 * @see Renren.getUsersInfo */ public void getUsersInfo (UsersGetInfoRequestParam param, AbstractRequestListener<UsersGetInfoResponseBean> listener) { UsersGetInfoHelper helper = new UsersGetInfoHelper(renren); helper.asyncGetUsersInfo(pool, param, listener); } /** * 发状态,异步调用status.set * 参见http://wiki.dev.renren.com/wiki/Status.set * * @param status * 要发布的状态 * @param listener * 用以监听发布状态结果的监听器对象 * @param truncOption * 若超出了长度,是否自动截短至140个字 */ public void publishStatus(StatusSetRequestParam status, AbstractRequestListener<StatusSetResponseBean> listener, boolean truncOption) { StatusHelper helper = new StatusHelper(renren); helper.asyncPublish(pool, status, listener, truncOption); } /** * 发送新鲜事<br> * 异步调用feed.publishFeed接口 * 参见http://wiki.dev.renren.com/wiki/Feed.publishFeed * * @param feed * 要发布的新鲜事 * @param listener * 用以监听发布新鲜事结果的监听器对象 * @param truncOption * 若超出了长度,是否自动截短至限制的长度 */ public void publishFeed(FeedPublishRequestParam feed, AbstractRequestListener<FeedPublishResponseBean> listener, boolean truncOption) { FeedHelper helper = new FeedHelper(renren); helper.asyncPublish(pool, feed, listener, truncOption); } /** * 创建相册的异步接口 * * @param album * 调用此接口需准备的参数 * @param listener * 开发者实现,对返回结果进行操作 * * <p>详情请参考 http://wiki.dev.renren.com/wiki/Photos.createAlbum */ public void createAlbum(AlbumCreateRequestParam album, AbstractRequestListener<AlbumCreateResponseBean> listener) { new PhotoHelper(renren).asyncCreateAlbum(album, listener); } /** * 获取相册的异步接口 * * @param album * 调用此接口需准备的参数 * @param listener * 开发者实现,对返回结果进行操作 * * <p>详情请参考 http://wiki.dev.renren.com/wiki/Photos.getAlbums * */ public void getAlbums(AlbumGetRequestParam album, AbstractRequestListener<AlbumGetResponseBean> listener) { new PhotoHelper(renren).asyncGetAlbums(album, listener); } /** * 上传照片的异步接口 * * @param photo * 调用此接口需准备的参数 * @param listener * 开发者实现,对返回结果进行操作 * * <p>详情请参考 http://wiki.dev.renren.com/wiki/Photos.upload */ public void publishPhoto(PhotoUploadRequestParam photo, AbstractRequestListener<PhotoUploadResponseBean> listener) { new PhotoHelper(renren).asyncUploadPhoto(photo, listener); } /** * friends.get接口 得到当前登录用户的好友列表,得到的只是含有好友id的列表<br> * http://wiki.dev.renren.com/wiki/Friends.get * * @see Renren.getFriends * @param param * 调用接口需要的参数 * @param listener * 接口调用的监听器 */ public void getFriends (FriendsGetRequestParam param, AbstractRequestListener<FriendsGetResponseBean> listener) { new FriendsHelper(renren).asyncGetFriends(pool, param, listener); } /** * friends.getFriends接口 得到当前登录用户的好友列表<br> * http://wiki.dev.renren.com/wiki/Friends.getFriends * * @see Renren.getFriends * @param param * 调用接口需要的参数 * @param listener * 接口调用的监听器 */ public void getFriends (FriendsGetFriendsRequestParam param, AbstractRequestListener<FriendsGetFriendsResponseBean> listener) { new FriendsHelper(renren).asyncGetFriends(pool, param, listener); } }