首页 > 其他 > 详细

封装 获取后台数据类

时间:2014-03-03 08:52:51      阅读:391      评论:0      收藏:0      [点我收藏+]

import com.taotaospoken.project.json.request.BaseRequest;
import com.taotaospoken.project.json.response.BaseResponse;
import com.taotaospoken.project.util.NetworkUtil;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

/**
 * @作者 尤立才
 * @时间 2013-12-18
 * @作用 供客户端调用,获取后台数据或者提交表单
 * @开始编写代码啦...
 */
public class NetworkDataAccessApi {

	private static Context context;
	private static NetworkDataAccessApi mNetworkDataAccess;
	private static JsonFactory mJsonFactory; //json数据处理工厂
	private LoadDataTask loadtask;

	// 访问网络资源 所必要的 参数
	private int urlId = 0; // URLID
	private String accessUrl = null;// 网络资源地址
	private BaseRequest requestParam = null; // 地址参数

	private NetworkDataAccessListner dataResponseListner = null; // 外部调用接口

	private BaseResponse mBaseResponse;
	/**
	 * 
	 * @描述 获得返回数据实例
	 * @参数 @return
	 * @作者 尤立才
	 * @时间 2013-12-18
	 * @返回类型 DataResponse
	 */
	public static NetworkDataAccessApi getInstance(Context context1) {
		if (mNetworkDataAccess == null) {
			mNetworkDataAccess = new NetworkDataAccessApi();
			mJsonFactory = JsonFactory.getNewFactory(context);
		}
		context = context1;
		return mNetworkDataAccess;
	}

	/**
	 * 
	 * @描述   发送请求
	 * @参数 @param ID 访问Url对应的ID
	 * @参数 @param accessUrl 访问Url
	 * @参数 @param requestParam URL参数
	 * @作者 尤立才
	 * @时间 2013-12-18
	 * @返回类型 void
	 */
	public void sendRequest(int ID, String accessUrl,
			BaseRequest requestParam,BaseResponse baseResponse) {
		mBaseResponse=baseResponse;
		this.urlId = ID;
		this.accessUrl = accessUrl;
		this.requestParam = requestParam;
		
		loadtask = new LoadDataTask();
		loadtask.execute();
	}

	/**
	 * 
	 * @描述 取消本次请求
	 * @参数
	 * @作者 尤立才
	 * @时间 2013-12-18
	 * @返回类型 void
	 */
	public void cancellTask() {
		if (loadtask != null
				&& loadtask.getStatus() == AsyncTask.Status.RUNNING) {
			loadtask.cancel(true);
			loadtask = null;
			if (dataResponseListner != null) {
				dataResponseListner.ReceiveDataCancelled();
			}
		}
	}

	private void receiveDataComplete(Object o) {
		if (this.dataResponseListner != null) {
			dataResponseListner.ReceiveDataComplete(o);
		}
	}

	private void receiveDataOverTime() {
		if (dataResponseListner != null) {
			dataResponseListner.ReceiveDataOverTime();
		}
	}

	private void receiveDataError() {
		if (dataResponseListner != null) {
			dataResponseListner.ReceiveDataError();
		}
	}

	// ============================================================================

	class LoadDataTask extends AsyncTask<Object, Integer, Object> {

		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			if (loadtask.isCancelled()) {
				Log.e("=============================", "onPreExecute 取消了");
			} else {
				Log.e("=============================", "onPreExecute");
			}
			super.onPreExecute();
		}

		@Override
		protected Object doInBackground(Object... objects) {
			Object object = null;
			try {
				object = mJsonFactory.getData(accessUrl, requestParam, urlId,mBaseResponse);
			} catch (Exception e) {
				object = null;
			}

			return object;
		}

		@Override
		protected void onPostExecute(Object result) {
			if (loadtask.isCancelled()) {
				Log.e("=============================", "onPostExecute 取消了");
			} else {
				Log.e("=============================", "onPostExecute");
			}
			try {
				if (NetWork.REQUEST_SUCCESS == mJsonFactory.getResponseCode()) {
					if (result == null) {
						receiveDataError();
					} else
						receiveDataComplete(result);
				} else if (NetworkUtil.NO_NET_CONNECT == mJsonFactory
						.getResponseCode()) {
					receiveDataOverTime();
				} else {
					receiveDataOverTime();
				}
			} catch (Exception e) {
				receiveDataError();
			}
		}

		@Override
		protected void onCancelled() {
			// TODO Auto-generated method stub
			super.onCancelled();
		}

	}

	public void setDataResponseListner(
			NetworkDataAccessListner dataResponseListner) {
		this.dataResponseListner = dataResponseListner;
	}

	// ====================以下是外部调用接口==================================

	public interface NetworkDataAccessListner {

		/*
		 * 加载数据完成
		 */
		void ReceiveDataComplete(Object object);// 加载数据完成

		void ReceiveDataError();// 加载数据出问题

		void ReceiveDataOverTime();// 加载数据超时

		void ReceiveDataCancelled();// 加载数据取消
	
	}
}
写的一般,望大神指点。

封装 获取后台数据类,布布扣,bubuko.com

封装 获取后台数据类

原文:http://blog.csdn.net/youlicai/article/details/20280901

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!