public class ApiClient { public static final String UTF_8 = "UTF-8"; public static final String DESC = "descend"; public static final String ASC = "ascend"; private final static int TIMEOUT_CONNECTION = 20000; private final static int TIMEOUT_SOCKET = 20000; private final static int RETRY_TIME = 3; private static String appCookie; private static String appUserAgent; public static void cleanCookie() { appCookie = ""; } private static String getCookie(AppContext appContext) { if(appCookie == null || appCookie == "") { appCookie = appContext.getProperty("cookie"); } return appCookie; } private static String getUserAgent(AppContext appContext) { if(appUserAgent == null || appUserAgent == "") { StringBuilder ua = new StringBuilder("OSChina.NET"); ua.append('/'+appContext.getPackageInfo().versionName+'_'+appContext.getPackageInfo().versionCode);//App版本 ua.append("/Android");//手机系统平台 ua.append("/"+android.os.Build.VERSION.RELEASE);//手机系统版本 ua.append("/"+android.os.Build.MODEL); //手机型号 ua.append("/"+appContext.getAppId());//客户端唯一标识 appUserAgent = ua.toString(); } return appUserAgent; } private static HttpClient getHttpClient() { HttpClient httpClient = new HttpClient(); // 设置 HttpClient 接收 Cookie,用与浏览器一样的策略 httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); // 设置 默认的超时重试处理策略 httpClient.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); // 设置 连接超时时间 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(TIMEOUT_CONNECTION); // 设置 读数据超时时间 httpClient.getHttpConnectionManager().getParams().setSoTimeout(TIMEOUT_SOCKET); // 设置 字符集 httpClient.getParams().setContentCharset(UTF_8); return httpClient; } private static GetMethod getHttpGet(String url, String cookie, String userAgent) { GetMethod httpGet = new GetMethod(url); // 设置 请求超时时间 httpGet.getParams().setSoTimeout(TIMEOUT_SOCKET); httpGet.setRequestHeader("Host", URLs.HOST); httpGet.setRequestHeader("Connection","Keep-Alive"); httpGet.setRequestHeader("Cookie", cookie); httpGet.setRequestHeader("User-Agent", userAgent); return httpGet; } private static PostMethod getHttpPost(String url, String cookie, String userAgent) { PostMethod httpPost = new PostMethod(url); // 设置 请求超时时间 httpPost.getParams().setSoTimeout(TIMEOUT_SOCKET); httpPost.setRequestHeader("Host", URLs.HOST); httpPost.setRequestHeader("Connection","Keep-Alive"); httpPost.setRequestHeader("Cookie", cookie); httpPost.setRequestHeader("User-Agent", userAgent); return httpPost; } private static String _MakeURL(String p_url, Map<String, Object> params) { StringBuilder url = new StringBuilder(p_url); if(url.indexOf("?")<0) url.append('?'); for(String name : params.keySet()){ url.append('&'); url.append(name); url.append('='); url.append(String.valueOf(params.get(name))); //不做URLEncoder处理 //url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8)); } return url.toString().replace("?&", "?"); } /** * get请求URL * @param url * @throws AppException */ private static InputStream http_get(AppContext appContext, String url) throws AppException { String cookie = getCookie(appContext); String userAgent = getUserAgent(appContext); HttpClient httpClient = null; GetMethod httpGet = null; String responseBody = ""; int time = 0; do{ try { httpClient = getHttpClient(); httpGet = getHttpGet(url, cookie, userAgent); int statusCode = httpClient.executeMethod(httpGet); if (statusCode != HttpStatus.SC_OK) { throw AppException.http(statusCode); } responseBody = httpGet.getResponseBodyAsString(); break; } catch (HttpException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生致命的异常,可能是协议不对或者返回的内容有问题 e.printStackTrace(); throw AppException.http(e); } catch (IOException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生网络异常 e.printStackTrace(); throw AppException.network(e); } finally { // 释放连接 httpGet.releaseConnection(); httpClient = null; } }while(time < RETRY_TIME); //responseBody = responseBody.replaceAll("\\p{Cntrl}", "\r\n"); if(responseBody.contains("result") && responseBody.contains("errorCode") && appContext.containsProperty("user.uid")){ try { Result res = Result.parse(new ByteArrayInputStream(responseBody.getBytes())); if(res.getErrorCode() == 0){ appContext.Logout(); appContext.getUnLoginHandler().sendEmptyMessage(1); } } catch (Exception e) { e.printStackTrace(); } } return new ByteArrayInputStream(responseBody.getBytes()); } /** * 公用post方法 * @param url * @param params * @param files * @throws AppException */ private static InputStream _post(AppContext appContext, String url, Map<String, Object> params, Map<String,File> files) throws AppException { //System.out.println("post_url==> "+url); String cookie = getCookie(appContext); String userAgent = getUserAgent(appContext); HttpClient httpClient = null; PostMethod httpPost = null; //post表单参数处理 int length = (params == null ? 0 : params.size()) + (files == null ? 0 : files.size()); Part[] parts = new Part[length]; int i = 0; if(params != null) for(String name : params.keySet()){ parts[i++] = new StringPart(name, String.valueOf(params.get(name)), UTF_8); //System.out.println("post_key==> "+name+" value==>"+String.valueOf(params.get(name))); } if(files != null) for(String file : files.keySet()){ try { parts[i++] = new FilePart(file, files.get(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } //System.out.println("post_key_file==> "+file); } String responseBody = ""; int time = 0; do{ try { httpClient = getHttpClient(); httpPost = getHttpPost(url, cookie, userAgent); httpPost.setRequestEntity(new MultipartRequestEntity(parts,httpPost.getParams())); int statusCode = httpClient.executeMethod(httpPost); if(statusCode != HttpStatus.SC_OK) { throw AppException.http(statusCode); } else if(statusCode == HttpStatus.SC_OK) { Cookie[] cookies = httpClient.getState().getCookies(); String tmpcookies = ""; for (Cookie ck : cookies) { tmpcookies += ck.toString()+";"; } //保存cookie if(appContext != null && tmpcookies != ""){ appContext.setProperty("cookie", tmpcookies); appCookie = tmpcookies; } } responseBody = httpPost.getResponseBodyAsString(); //System.out.println("XMLDATA=====>"+responseBody); break; } catch (HttpException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生致命的异常,可能是协议不对或者返回的内容有问题 e.printStackTrace(); throw AppException.http(e); } catch (IOException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生网络异常 e.printStackTrace(); throw AppException.network(e); } finally { // 释放连接 httpPost.releaseConnection(); httpClient = null; } }while(time < RETRY_TIME); responseBody = responseBody.replaceAll("\\p{Cntrl}", ""); if(responseBody.contains("result") && responseBody.contains("errorCode") && appContext.containsProperty("user.uid")){ try { Result res = Result.parse(new ByteArrayInputStream(responseBody.getBytes())); if(res.getErrorCode() == 0){ appContext.Logout(); appContext.getUnLoginHandler().sendEmptyMessage(1); } } catch (Exception e) { e.printStackTrace(); } } return new ByteArrayInputStream(responseBody.getBytes()); } /** * post请求URL * @param url * @param params * @param files * @throws AppException * @throws IOException * @throws */ private static Result http_post(AppContext appContext, String url, Map<String, Object> params, Map<String,File> files) throws AppException, IOException { return Result.parse(_post(appContext, url, params, files)); } /** * 获取网络图片 * @param url * @return */ public static Bitmap getNetBitmap(String url) throws AppException { HttpClient httpClient = null; GetMethod httpGet = null; Bitmap bitmap = null; int time = 0; do{ try { httpClient = getHttpClient(); httpGet = getHttpGet(url, null, null); int statusCode = httpClient.executeMethod(httpGet); if (statusCode != HttpStatus.SC_OK) { throw AppException.http(statusCode); } InputStream inStream = httpGet.getResponseBodyAsStream(); bitmap = BitmapFactory.decodeStream(inStream); inStream.close(); break; } catch (HttpException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生致命的异常,可能是协议不对或者返回的内容有问题 e.printStackTrace(); throw AppException.http(e); } catch (IOException e) { time++; if(time < RETRY_TIME) { try { Thread.sleep(1000); } catch (InterruptedException e1) {} continue; } // 发生网络异常 e.printStackTrace(); throw AppException.network(e); } finally { // 释放连接 httpGet.releaseConnection(); httpClient = null; } }while(time < RETRY_TIME); return bitmap; } /** * 检查版本更新 * @param url * @return */ public static Update checkVersion(AppContext appContext) throws AppException { try{ return Update.parse(http_get(appContext, URLs.UPDATE_VERSION)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 检查是否有可下载的欢迎界面图片 * @param appContext * @return * @throws AppException */ public static void checkBackGround(AppContext appContext) throws AppException { try{ WellcomeImage update = WellcomeImage.parse(http_get(appContext, URLs.UPDATE_VERSION)); String filePath = FileUtils.getAppCache(appContext, "welcomeback"); // 如果没有图片的链接地址则返回 if(StringUtils.isEmpty(update.getDownloadUrl())) { return; } if(update.isUpdate()) { String url = update.getDownloadUrl(); String fileName = update.getStartDate().replace("-", "") + "-" + update.getEndDate().replace("-", ""); List<File> files = FileUtils.listPathFiles(filePath); if (!files.isEmpty()) { if(files.get(0).getName().equalsIgnoreCase(fileName)) { return; } } Bitmap photo = getNetBitmap(url); ImageUtils.saveImageToSD(appContext, filePath + fileName + ".png", photo, 100); } else { FileUtils.clearFileWithPath(filePath); } }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 登录, 自动处理cookie * @param url * @param username * @param pwd * @return * @throws AppException */ public static User login(AppContext appContext, String username, String pwd) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("username", username); params.put("pwd", pwd); params.put("keep_login", 1); String loginurl = URLs.LOGIN_VALIDATE_HTTP; if(appContext.isHttpsLogin()){ loginurl = URLs.LOGIN_VALIDATE_HTTPS; } try{ return User.parse(_post(appContext, loginurl, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 我的个人资料 * @param appContext * @param uid * @return * @throws AppException */ public static MyInformation myInformation(AppContext appContext, int uid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); try{ return MyInformation.parse(_post(appContext, URLs.MY_INFORMATION, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 更新用户头像 * @param appContext * @param uid 当前用户uid * @param portrait 新上传的头像 * @return * @throws AppException */ public static Result updatePortrait(AppContext appContext, int uid, File portrait) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); Map<String, File> files = new HashMap<String, File>(); files.put("portrait", portrait); try{ return http_post(appContext, URLs.PORTRAIT_UPDATE, params, files); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取用户信息个人专页(包含该用户的动态信息以及个人信息) * @param uid 自己的uid * @param hisuid 被查看用户的uid * @param hisname 被查看用户的用户名 * @param pageIndex 页面索引 * @param pageSize 每页读取的动态个数 * @return * @throws AppException */ public static UserInformation information(AppContext appContext, int uid, int hisuid, String hisname, int pageIndex, int pageSize) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("hisuid", hisuid); params.put("hisname", hisname); params.put("pageIndex", pageIndex); params.put("pageSize", pageSize); try{ return UserInformation.parse(_post(appContext, URLs.USER_INFORMATION, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 更新用户之间关系(加关注、取消关注) * @param uid 自己的uid * @param hisuid 对方用户的uid * @param newrelation 0:取消对他的关注 1:关注他 * @return * @throws AppException */ public static Result updateRelation(AppContext appContext, int uid, int hisuid, int newrelation) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("hisuid", hisuid); params.put("newrelation", newrelation); try{ return Result.parse(_post(appContext, URLs.USER_UPDATERELATION, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取用户通知信息 * @param uid * @return * @throws AppException */ public static Notice getUserNotice(AppContext appContext, int uid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); try{ return Notice.parse(_post(appContext, URLs.USER_NOTICE, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 清空通知消息 * @param uid * @param type 1:@我的信息 2:未读消息 3:评论个数 4:新粉丝个数 * @return * @throws AppException */ public static Result noticeClear(AppContext appContext, int uid, int type) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("type", type); try{ return Result.parse(_post(appContext, URLs.NOTICE_CLEAR, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 用户粉丝、关注人列表 * @param uid * @param relation 0:显示自己的粉丝 1:显示自己的关注者 * @param pageIndex * @param pageSize * @return * @throws AppException */ public static FriendList getFriendList(AppContext appContext, final int uid, final int relation, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.FRIENDS_LIST, new HashMap<String, Object>(){{ put("uid", uid); put("relation", relation); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return FriendList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取资讯列表 * @param url * @param catalog * @param pageIndex * @param pageSize * @return * @throws AppException */ public static NewsList getNewsList(AppContext appContext, final int catalog, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.NEWS_LIST, new HashMap<String, Object>(){{ put("catalog", catalog); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return NewsList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取资讯的详情 * @param url * @param news_id * @return * @throws AppException */ public static News getNewsDetail(AppContext appContext, final int news_id) throws AppException { String newUrl = _MakeURL(URLs.NEWS_DETAIL, new HashMap<String, Object>(){{ put("id", news_id); }}); try{ return News.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取某用户的博客列表 * @param authoruid * @param uid * @param pageIndex * @param pageSize * @return * @throws AppException */ public static BlogList getUserBlogList(AppContext appContext, final int authoruid, final String authorname, final int uid, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.USERBLOG_LIST, new HashMap<String, Object>(){{ put("authoruid", authoruid); put("authorname", URLEncoder.encode(authorname)); put("uid", uid); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return BlogList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取博客列表 * @param type 推荐:recommend 最新:latest * @param pageIndex * @param pageSize * @return * @throws AppException */ public static BlogList getBlogList(AppContext appContext, final String type, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.BLOG_LIST, new HashMap<String, Object>(){{ put("type", type); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return BlogList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 删除某用户的博客 * @param uid * @param authoruid * @param id * @return * @throws AppException */ public static Result delBlog(AppContext appContext, int uid, int authoruid, int id) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("authoruid", authoruid); params.put("id", id); try{ return http_post(appContext, URLs.USERBLOG_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取博客详情 * @param blog_id * @return * @throws AppException */ public static Blog getBlogDetail(AppContext appContext, final int blog_id) throws AppException { String newUrl = _MakeURL(URLs.BLOG_DETAIL, new HashMap<String, Object>(){{ put("id", blog_id); }}); try{ return Blog.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取帖子列表 * @param url * @param catalog * @param pageIndex * @return * @throws AppException */ public static PostList getPostList(AppContext appContext, final int catalog, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.POST_LIST, new HashMap<String, Object>(){{ put("catalog", catalog); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return PostList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 通过Tag获取帖子列表 * @param url * @param catalog * @param pageIndex * @return * @throws AppException */ public static PostList getPostListByTag(AppContext appContext, final String tag, final int pageIndex, final int pageSize) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("tag", tag); params.put("pageIndex", pageIndex); params.put("pageSize", pageSize); try{ return PostList.parse(_post(appContext, URLs.POST_LIST, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取帖子的详情 * @param url * @param post_id * @return * @throws AppException */ public static Post getPostDetail(AppContext appContext, final int post_id) throws AppException { String newUrl = _MakeURL(URLs.POST_DETAIL, new HashMap<String, Object>(){{ put("id", post_id); }}); try{ return Post.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发帖子 * @param post (uid、title、catalog、content、isNoticeMe) * @return * @throws AppException */ public static Result pubPost(AppContext appContext, Post post) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", post.getAuthorId()); params.put("title", post.getTitle()); params.put("catalog", post.getCatalog()); params.put("content", post.getBody()); params.put("isNoticeMe", post.getIsNoticeMe()); try{ return http_post(appContext, URLs.POST_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取动弹列表 * @param uid * @param pageIndex * @param pageSize * @return * @throws AppException */ public static TweetList getTweetList(AppContext appContext, final int uid, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.TWEET_LIST, new HashMap<String, Object>(){{ put("uid", uid); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return TweetList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取动弹详情 * @param tweet_id * @return * @throws AppException */ public static Tweet getTweetDetail(AppContext appContext, final int tweet_id) throws AppException { String newUrl = _MakeURL(URLs.TWEET_DETAIL, new HashMap<String, Object>(){{ put("id", tweet_id); }}); try{ return Tweet.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发动弹 * @param Tweet-uid & msg & image * @return * @throws AppException */ public static Result pubTweet(AppContext appContext, Tweet tweet) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", tweet.getAuthorId()); params.put("msg", tweet.getBody()); Map<String, File> files = new HashMap<String, File>(); if(tweet.getImageFile() != null) files.put("img", tweet.getImageFile()); if (tweet.getAmrFile() != null) files.put("amr", tweet.getAmrFile()); try{ return http_post(appContext, URLs.TWEET_PUB, params, files); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 删除动弹 * @param uid * @param tweetid * @return * @throws AppException */ public static Result delTweet(AppContext appContext, int uid, int tweetid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("tweetid", tweetid); try{ return http_post(appContext, URLs.TWEET_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取动态列表 * @param uid * @param catalog 1最新动态 2@我 3评论 4我自己 * @param pageIndex * @param pageSize * @return * @throws AppException */ public static ActiveList getActiveList(AppContext appContext, final int uid,final int catalog, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.ACTIVE_LIST, new HashMap<String, Object>(){{ put("uid", uid); put("catalog", catalog); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return ActiveList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取留言列表 * @param uid * @param pageIndex * @return * @throws AppException */ public static MessageList getMessageList(AppContext appContext, final int uid, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.MESSAGE_LIST, new HashMap<String, Object>(){{ put("uid", uid); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return MessageList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发送留言 * @param uid 登录用户uid * @param receiver 接受者的用户id * @param content 消息内容,注意不能超过250个字符 * @return * @throws AppException */ public static Result pubMessage(AppContext appContext, int uid, int receiver, String content) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("receiver", receiver); params.put("content", content); try{ return http_post(appContext, URLs.MESSAGE_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 转发留言 * @param uid 登录用户uid * @param receiver 接受者的用户名 * @param content 消息内容,注意不能超过250个字符 * @return * @throws AppException */ public static Result forwardMessage(AppContext appContext, int uid, String receiverName, String content) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("receiverName", receiverName); params.put("content", content); try{ return http_post(appContext, URLs.MESSAGE_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 删除留言 * @param uid 登录用户uid * @param friendid 留言者id * @return * @throws AppException */ public static Result delMessage(AppContext appContext, int uid, int friendid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("friendid", friendid); try{ return http_post(appContext, URLs.MESSAGE_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取博客评论列表 * @param id 博客id * @param pageIndex * @param pageSize * @return * @throws AppException */ public static BlogCommentList getBlogCommentList(AppContext appContext, final int id, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.BLOGCOMMENT_LIST, new HashMap<String, Object>(){{ put("id", id); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return BlogCommentList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发表博客评论 * @param blog 博客id * @param uid 登陆用户的uid * @param content 评论内容 * @return * @throws AppException */ public static Result pubBlogComment(AppContext appContext, int blog, int uid, String content) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("blog", blog); params.put("uid", uid); params.put("content", content); try{ return http_post(appContext, URLs.BLOGCOMMENT_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发表博客评论 * @param blog 博客id * @param uid 登陆用户的uid * @param content 评论内容 * @param reply_id 评论id * @param objuid 被评论的评论发表者的uid * @return * @throws AppException */ public static Result replyBlogComment(AppContext appContext, int blog, int uid, String content, int reply_id, int objuid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("blog", blog); params.put("uid", uid); params.put("content", content); params.put("reply_id", reply_id); params.put("objuid", objuid); try{ return http_post(appContext, URLs.BLOGCOMMENT_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 删除博客评论 * @param uid 登录用户的uid * @param blogid 博客id * @param replyid 评论id * @param authorid 评论发表者的uid * @param owneruid 博客作者uid * @return * @throws AppException */ public static Result delBlogComment(AppContext appContext, int uid, int blogid, int replyid, int authorid, int owneruid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("blogid", blogid); params.put("replyid", replyid); params.put("authorid", authorid); params.put("owneruid", owneruid); try{ return http_post(appContext, URLs.BLOGCOMMENT_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取评论列表 * @param catalog 1新闻 2帖子 3动弹 4动态 * @param id * @param pageIndex * @param pageSize * @return * @throws AppException */ public static CommentList getCommentList(AppContext appContext, final int catalog, final int id, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.COMMENT_LIST, new HashMap<String, Object>(){{ put("catalog", catalog); put("id", id); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return CommentList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发表评论 * @param catalog 1新闻 2帖子 3动弹 4动态 * @param id 某条新闻,帖子,动弹的id * @param uid 用户uid * @param content 发表评论的内容 * @param isPostToMyZone 是否转发到我的空间 0不转发 1转发 * @return * @throws AppException */ public static Result pubComment(AppContext appContext, int catalog, int id, int uid, String content, int isPostToMyZone) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("catalog", catalog); params.put("id", id); params.put("uid", uid); params.put("content", content); params.put("isPostToMyZone", isPostToMyZone); try{ return http_post(appContext, URLs.COMMENT_PUB, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * * @param id 表示被评论的某条新闻,帖子,动弹的id 或者某条消息的 friendid * @param catalog 表示该评论所属什么类型:1新闻 2帖子 3动弹 4动态 * @param replyid 表示被回复的单个评论id * @param authorid 表示该评论的原始作者id * @param uid 用户uid 一般都是当前登录用户uid * @param content 发表评论的内容 * @return * @throws AppException */ public static Result replyComment(AppContext appContext, int id, int catalog, int replyid, int authorid, int uid, String content) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("catalog", catalog); params.put("id", id); params.put("uid", uid); params.put("content", content); params.put("replyid", replyid); params.put("authorid", authorid); try{ return http_post(appContext, URLs.COMMENT_REPLY, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 删除评论 * @param id 表示被评论对应的某条新闻,帖子,动弹的id 或者某条消息的 friendid * @param catalog 表示该评论所属什么类型:1新闻 2帖子 3动弹 4动态&留言 * @param replyid 表示被回复的单个评论id * @param authorid 表示该评论的原始作者id * @return * @throws AppException */ public static Result delComment(AppContext appContext, int id, int catalog, int replyid, int authorid) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("id", id); params.put("catalog", catalog); params.put("replyid", replyid); params.put("authorid", authorid); try{ return http_post(appContext, URLs.COMMENT_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 用户收藏列表 * @param uid 用户UID * @param type 0:全部收藏 1:软件 2:话题 3:博客 4:新闻 5:代码 * @param pageIndex 页面索引 0表示第一页 * @param pageSize 每页的数量 * @return * @throws AppException */ public static FavoriteList getFavoriteList(AppContext appContext, final int uid, final int type, final int pageIndex, final int pageSize) throws AppException { String newUrl = _MakeURL(URLs.FAVORITE_LIST, new HashMap<String, Object>(){{ put("uid", uid); put("type", type); put("pageIndex", pageIndex); put("pageSize", pageSize); }}); try{ return FavoriteList.parse(http_get(appContext, newUrl)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 用户添加收藏 * @param uid 用户UID * @param objid 比如是新闻ID 或者问答ID 或者动弹ID * @param type 1:软件 2:话题 3:博客 4:新闻 5:代码 * @return * @throws AppException */ public static Result addFavorite(AppContext appContext, int uid, int objid, int type) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("objid", objid); params.put("type", type); try{ return http_post(appContext, URLs.FAVORITE_ADD, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 用户删除收藏 * @param uid 用户UID * @param objid 比如是新闻ID 或者问答ID 或者动弹ID * @param type 1:软件 2:话题 3:博客 4:新闻 5:代码 * @return * @throws AppException */ public static Result delFavorite(AppContext appContext, int uid, int objid, int type) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("uid", uid); params.put("objid", objid); params.put("type", type); try{ return http_post(appContext, URLs.FAVORITE_DELETE, params, null); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取搜索列表 * @param catalog 全部:all 新闻:news 问答:post 软件:software 博客:blog 代码:code * @param content 搜索的内容 * @param pageIndex * @param pageSize * @return * @throws AppException */ public static SearchList getSearchList(AppContext appContext, String catalog, String content, int pageIndex, int pageSize) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("catalog", catalog); params.put("content", content); params.put("pageIndex", pageIndex); params.put("pageSize", pageSize); try{ return SearchList.parse(_post(appContext, URLs.SEARCH_LIST, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 软件列表 * @param searchTag 软件分类 推荐:recommend 最新:time 热门:view 国产:list_cn * @param pageIndex * @param pageSize * @return * @throws AppException */ public static SoftwareList getSoftwareList(AppContext appContext,final String searchTag,final int pageIndex,final int pageSize) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("searchTag", searchTag); params.put("pageIndex", pageIndex); params.put("pageSize", pageSize); try{ return SoftwareList.parse(_post(appContext, URLs.SOFTWARE_LIST, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 软件分类的软件列表 * @param searchTag 从softwarecatalog_list获取的tag * @param pageIndex * @param pageSize * @return * @throws AppException */ public static SoftwareList getSoftwareTagList(AppContext appContext,final int searchTag,final int pageIndex,final int pageSize) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("searchTag", searchTag); params.put("pageIndex", pageIndex); params.put("pageSize", pageSize); try{ return SoftwareList.parse(_post(appContext, URLs.SOFTWARETAG_LIST, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 软件分类列表 * @param tag 第一级:0 第二级:tag * @return * @throws AppException */ public static SoftwareCatalogList getSoftwareCatalogList(AppContext appContext,final int tag) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("tag", tag); try{ return SoftwareCatalogList.parse(_post(appContext, URLs.SOFTWARECATALOG_LIST, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 获取软件详情 * @param ident * @return * @throws AppException */ public static Software getSoftwareDetail(AppContext appContext, final String ident) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("ident", ident); try{ return Software.parse(_post(appContext, URLs.SOFTWARE_DETAIL, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 发送举报 * @param appContext * @param report * @return * @throws AppException */ public static String report(AppContext appContext, Report report) throws AppException { Map<String,Object> params = new HashMap<String,Object>(); params.put("obj_id", report.getReportId()); params.put("url", report.getLinkAddress()); params.put("obj_type", report.getReason()); if (report.getOtherReason() != null) { params.put("memo", report.getOtherReason()); } else { params.put("memo", "其他原因"); } try{ return StringUtils.toConvertString(_post(appContext, URLs.REPORT, params, null)); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } /** * 二维码扫描签到 * @param appContext * @param barcode * @return * @throws AppException */ public static String signIn(AppContext appContext, Barcode barcode) throws AppException { try{ return StringUtils.toConvertString(http_get(appContext, barcode.getUrl())); }catch(Exception e){ if(e instanceof AppException) throw (AppException)e; throw AppException.network(e); } } }