网络请求

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);
        }
    } 
}

 

posted on 2015-05-18 16:58  2015xbx  阅读(205)  评论(0编辑  收藏  举报

导航