public void getUserInfo(int offset, String postfix, int startIdx, int endIdx) {
		CommonLogger.logger.info("--------begin users' information collection--------");
		OAuthRequest req = null;
		
		BufferedWriter userInfoWriter = null, errorWriter = null;
		String tName = Thread.currentThread().getName();
		try {
			userInfoWriter = new BufferedWriter(new FileWriter(Constants.USER_INFO_FILE_PATH, true), 2097152);
			errorWriter = new BufferedWriter(new FileWriter(Constants.ERROR_WRITER, true));
		
			Token token = Resource.getToken(0);
			String userId = null;
			int cnt = 0, tokenIdx = 0;
			
			for(int i = startIdx; i < endIdx; i++) {
				userId = userIdList.get(i);
				req = new OAuthRequest(Verb.GET, Constants.USER_INFO_URL + userId);
				service.signRequest(token, req);
				Response resp = req.send();
				
				if(resp.getCode() == 200) {
					CommonLogger.logger.info(tName + " get info for useId: " + userId);
					userInfoWriter.write(resp.getBody() + "\n");
				} else if(resp.getCode() != 400) {
					CommonLogger.logger.info("error code:" + resp.getCode());
					CommonLogger.logger.info("error msg:" + resp.getBody());
					errorWriter.write(userId + "\n");
				}
				
				// limited, change access token
				if(++cnt > 350 || resp.getCode() == 400) {
					cnt = 0;
					tokenIdx = (++tokenIdx) % 10 + offset;
					token = Resource.getToken(tokenIdx);
					CommonLogger.logger.info("change access token: token " + tokenIdx);
				}
			}
		} catch (Exception e) {
			EmailUtil.sendEmail(e);
		} finally {
			try {
				if(userInfoWriter != null) {
					userInfoWriter.flush();
					userInfoWriter.close();
				}
			} catch(Exception e) {}
		}
		
		CommonLogger.logger.info("--------end of user infomation's collection--------");
	}