Java tutorial
/* * Copyright (C) 2010 mAPPn.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.bbxiaoqu.api; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.HashMap; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; import com.bbxiaoqu.R; import com.bbxiaoqu.api.util.Utils; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; /** * API * * @author dzyang.wang * @date 2010-10-27 * @since Version 0.4.0 */ public class ApiAsyncTask extends AsyncTask<Void, Void, Object> { // public static final int TIMEOUT_ERROR = 600; // public static final int BUSSINESS_ERROR = 610; HttpClient mClient; private int mReuqestAction; private ApiRequestListener mHandler; private Object mParameter; //private Session mSession; private Context mContext; ApiAsyncTask(Context context, int action, ApiRequestListener handler, Object param) { this.mContext = context; //this.mSession = Session.get(context); this.mReuqestAction = action; this.mHandler = handler; this.mParameter = param; this.mClient = new DefaultHttpClient(); } @Override protected Object doInBackground(Void... params) { if (!Utils.isNetworkAvailable(mContext)) { return TIMEOUT_ERROR; } String requestUrl = MarketAPI.API_URLS[mReuqestAction]; requestUrl = GETURL(requestUrl, mParameter);//?GETURL HttpEntity requestEntity = null; try { requestEntity = ApiRequestFactory.getRequestEntity(mReuqestAction, mParameter); } catch (UnsupportedEncodingException e) { Utils.D("OPPS...This device not support UTF8 encoding.[should not happend]"); return BUSSINESS_ERROR; } Object result = null; HttpResponse response = null; HttpUriRequest request = null; try { request = ApiRequestFactory.getRequest(requestUrl, mReuqestAction, requestEntity); mClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);// mClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);// response = mClient.execute(request); final int statusCode = response.getStatusLine().getStatusCode(); Utils.D("requestUrl " + requestUrl + " statusCode: " + statusCode); if (HttpStatus.SC_OK != statusCode) { // ? return statusCode; } result = ApiResponseFactory.getResponse(mContext, mReuqestAction, response); // ?API Response?BUSSINESS_ERROR?610 return result == null ? BUSSINESS_ERROR : result; } catch (IOException e) { Utils.D("Market API encounter the IO exception[mostly is timeout exception]", e); return TIMEOUT_ERROR; } finally { // release the connection if (request != null) { request.abort(); } if (response != null) { try { HttpEntity entity = response.getEntity(); if (entity != null) { entity.consumeContent(); } } catch (IOException e) { Utils.D("release low-level resource error"); } } } } @Override protected void onPostExecute(Object response) { if (mHandler == null) { return; } if (mContext instanceof Activity && ((Activity) mContext).isFinishing()) { //???? return; } if (response == null) { mHandler.onError(this.mReuqestAction, BUSSINESS_ERROR); return; } else if (response instanceof Integer) { Integer statusCode = (Integer) response; if (!handleCommonError(statusCode)) {//? mHandler.onError(this.mReuqestAction, (Integer) response); return; } } mHandler.onSuccess(this.mReuqestAction, response); } /** * ?Http Status Code * @param statusCode Http Status Code * @return Code??True?? */ private boolean handleCommonError(int statusCode) { if (statusCode == 200) { return true; } if (statusCode >= TIMEOUT_ERROR) { Utils.makeEventToast(mContext, mContext.getString(R.string.notification_server_error), false); } else if (statusCode >= HttpStatus.SC_INTERNAL_SERVER_ERROR) { Utils.makeEventToast(mContext, mContext.getString(R.string.notification_server_error), false); } else if (statusCode >= HttpStatus.SC_BAD_REQUEST) { Utils.makeEventToast(mContext, mContext.getString(R.string.notification_client_error), false); } return false; } /** * API? * * @author dzyang * @date 2010-10-28 * @since Version 0.4.0 */ public interface ApiRequestListener { /** * The CALLBACK for success aMarket API HTTP response * * the HTTP response */ void onSuccess(int method, Object obj); /** * The CALLBACK for failure aMarket API HTTP response * * @param statusCode * the HTTP response status code */ void onError(int method, int statusCode); } private String GETURL(String requestUrl, Object Parameter) { if (mReuqestAction == MarketAPI.ACTION_GETDYNAMICS) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String start = requestParams.get("start").toString(); String limit = requestParams.get("limit").toString(); requestUrl = requestUrl + "?userid=" + requestParams.get("userid").toString() + "&rang=xiaoqu&start=" + start + "&limit=" + limit; } else if (mReuqestAction == MarketAPI.ACTION_GETINFO) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } requestUrl = requestUrl + "?idtype=" + requestParams.get("idtype").toString() + "&guid=" + requestParams.get("guid").toString(); } else if (mReuqestAction == MarketAPI.ACTION_GETINFOS) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); String latitude = requestParams.get("latitude").toString(); String longitude = requestParams.get("longitude").toString(); String rang = requestParams.get("_rang").toString(); String community_id = requestParams.get("_community_id").toString(); String visiblerange = requestParams.get("_visiblerange").toString(); String status = requestParams.get("_status").toString(); String start = requestParams.get("_start").toString(); String limit = requestParams.get("_limit").toString(); requestUrl = requestUrl + "?userid=" + userid + "&latitude=" + latitude + "&longitude=" + longitude + "&rang=" + rang + "&visiblerange=" + visiblerange + "&community_id=" + community_id + "&status=" + status + "&start=" + start + "&limit=" + limit; } else if (mReuqestAction == MarketAPI.ACTION_GETFRIENDS) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?mid1=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_GETXIAOQUS) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String keyword = requestParams.get("keyword").toString(); String latitude = requestParams.get("latitude").toString(); String longitude = requestParams.get("longitude").toString(); if (keyword != null && keyword.length() > 0) { requestUrl = requestUrl + "?keyword=" + keyword; } else { requestUrl = requestUrl + "?latitude=" + latitude + "&longitude=" + longitude; } } else if (mReuqestAction == MarketAPI.ACTION_GETFWINFOS) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); String latitude = requestParams.get("latitude").toString(); String longitude = requestParams.get("longitude").toString(); String rang = requestParams.get("_rang").toString(); String status = requestParams.get("_status").toString(); String start = requestParams.get("_start").toString(); String limit = requestParams.get("_limit").toString(); requestUrl = requestUrl + "?userid=" + userid + "&latitude=" + latitude + "&longitude=" + longitude + "&rang=" + rang + "&status=" + status + "&start=" + start + "&limit=" + limit; } else if (mReuqestAction == MarketAPI.ACTION_GETUESERINFO) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_MYRANK) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_RANK) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String order = requestParams.get("_order").toString(); if (order.equals("num")) { requestUrl = requestUrl + "?order=num"; } else { requestUrl = requestUrl + "?order=score"; } } else if (mReuqestAction == MarketAPI.ACTION_GETUERSUMMARY) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_GETUSERVISIBLERANGE) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String country = requestParams.get("_country").toString(); String province = requestParams.get("_province").toString(); String city = requestParams.get("_city").toString(); String district = requestParams.get("_district").toString(); String street = requestParams.get("_street").toString(); requestUrl = requestUrl + "?country=" + country + "&province=" + province + "&city=" + city + "&district=" + district + "&street=" + street; } else if (mReuqestAction == MarketAPI.ACTION_GETUSERVISIBLECOMMUNITY) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_DAILYLOGIN) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } else if (mReuqestAction == MarketAPI.ACTION_GETSHOPINFO) { HashMap<String, Object> requestParams = null; if (Parameter instanceof HashMap) { requestParams = (HashMap<String, Object>) Parameter; } String userid = requestParams.get("_userid").toString(); requestUrl = requestUrl + "?userid=" + userid; } return requestUrl; } }