/Android-CCSDK

Android自定义开发框架封装

Primary LanguageJavaApache License 2.0Apache-2.0

#Android-CCSdk 点击查看使用示例 提供: 包含图片处理、图片加载、缓存处理(内存、外存)、HTTP访问请求、资源View等的加载及其他json数据解析等常用工具类

1、图片处理:详情查看cc.sdkutil.controller.image包下的CCBitmapHelper.java,支持比例压缩及质量压缩

2、图片加载:CCImageLoader.java 多图片加载工具,提供设置是否缓存到内存(默认false),是否缓存到磁盘(支持默认路径与自定义路径),支持图片压缩比例(默认不压缩),支持设置同时加载图片数量(默认10),支持设置图片加载反馈; 支持取消所有任务(如果取消了所任务需要重新使用ImageLoader需rest),支持取消某个特定的正在加载任务.

使用方式:

CCImageLoader mImageLoader = new CCImageLoader.Builder().needCacheInMemory().needCacheInDisk().outSize(128,                 128).callback(CCImageLoaderCallback).build();
mImageLoader.loadNetImage(imgUrl, objs /*此为你想传递的附加信息,成功后返回*/);
mImageLoader.loadResourceImage(res /* Resources */, resId, obj /*此为你想传递的附加信息,成功后返回*/);
mImageLoader.loadLocalImage(imgPath, obj  /*此为你想传递的附加信息,成功后返回*/);
private CCImageLoaderCallback mImageListener = new CCImageLoaderCallback() {

/**
 * @param bitmap  图片数据
 * @param objs 用户传入的需要重新返回的对象
 */
public void onSuccess(Bitmap bitmap, Object... objs) {
}

/**
 * @param reason  加载失败原因
 */
public void onFail(final String reason) {
	
}

};

3、缓存处理:详情查看cc.sdkutil.controller.cache包下的CCCacheManager.java,实现内存与磁盘LRU缓存算法,内存采用Reference检测对象是否被回收,支持分别设置缓存大小,缓存和获取数据,支持异步清空缓存并相应回调.

    // 缓存到内存
    CCCacheManager.newInstance().cacheByteInMemory(memoryPath, byte[]);
    
    // 缓存到磁盘
    CCCacheManager.newInstance().cacheByteInDisk(diskPath, byte[]);
    
    // 清空缓存
    CCCacheManager.newInstance().clearCache(fileDir, new CCDiskClearCallback() {
        @Override
        public void onCompleted(boolean success) {
            
        }
    });

4、HTTP请求:HTTP访问客户端,初始化客户端发起http请求; 编码方式、cookie、userAgent等, 支持(POST/GET/PUT/HEAD/DELETE)方式访问服务器端,默认支持gzip, deflate压缩; 支持错误访问出错: NETERROR_EXCEPTION("网络未连接"), READ_EXCEPTION("获取数据出错"), HTTPS_EXCEPTION("https 请求错误"), TIMEOUT_EXCEPTION("连接超时"), ERROR_EXCEPTION(">=400 访问服务器出错"), INTRRUPT_EXCEPTION("用户取消了请求操作");

get请求实例如下:

private void getRequest() {
    final Map<String, String> param = new HashMap<String, String>() {
        {
            put("userId", "USERID");
        }
    };
    new CCHttpClientAsync().get(GET_URL, param, new CCHttpResponseCallback() {
        @Override
        public void onSuccess(CCHttpResponseInfo info, byte[] bts) {
            super.onSuccess(info, bts);
        }

        @Override
        public void onFail(CCHttpException e, byte[] bts) {
            super.onFail(e, bts);
            switch (e.getType()) {
                case NETERROR_EXCEPTION:
                    // 网络连接错误
                    break;
                case TIMEOUT_EXCEPTION:
                    // 连接服务器超时
                    break;
                case INTRRUPT_EXCEPTION:
                    // 用户取消了操作
                    break;
                case ERROR_EXCEPTION:
                    // 访问服务器出错
                    break;
                default:
                    break;
            }
        }
    });
}

post请求示例如下:

private void postRequest() {
    CCMultiParam param = new CCMultiParam();
    param.put("userId", "USERID");
    param.put("other", "OTHER");
    new CCHttpClientAsync().get(POST_URL, param, new CCHttpResponseCallback() {
        @Override
        public void onSuccess(CCHttpResponseInfo info, byte[] bts) {
            super.onSuccess(info, bts);
        }

        @Override
        public void onFail(CCHttpException e, byte[] bts) {
            super.onFail(e, bts);
            switch (e.getType()) {
                case NETERROR_EXCEPTION:
                    // 网络连接错误
                    break;
                case TIMEOUT_EXCEPTION:
                    // 连接服务器超时
                    break;
                case INTRRUPT_EXCEPTION:
                    // 用户取消了操作
                    break;
                case ERROR_EXCEPTION:
                    // 访问服务器出错
                    break;
                default:
                    break;
            }
        }
    });
}

5、View或者资源加载以及View监听

Activity及Fragment中使用:

@CCInjectRes(R.id.login_name_edit)
EditText medtName;

@CCInjectEvent(value = {R.id.login_radiogroup}, clazz = RadioGroup.OnCheckedChangeListener.class)
void onCheckedChanged(RadioGroup group, int checkedId) {
    
}

@CCInjectEvent(value = {R.id.login_loginBtn, R.id.login_registerBtn}, clazz = View.OnClickListener.class)
void onClick(View view) {
    switch (view.getId()) {
        case R.id.login_loginBtn:
            
            break;
        default:
            break;
    }
}

Adapter中使用:
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.adapter_fencelist, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    return convertView;
}

static class ViewHolder {
    @CCInjectRes(R.id.fencelist_item_name)
    TextView mTxtName;
    @CCInjectRes(R.id.fencelist_item_businessRule)
    TextView mTxtRule;
    @CCInjectRes(R.id.fencelist_item_latitude)
    TextView mTxtLatituxde;
    @CCInjectRes(R.id.fencelist_item_longitude)
    TextView mTxtLongitude;
    @CCInjectRes(R.id.fencelist_item_radius)
    TextView mTxtRadius;

    public ViewHolder(View itemView) {
        CCInjectUtil.inject(this, itemView);
    }
}
**注意:如果是在Activity中需要调用CCInjectUtil.inject(this) 、 fragment或者其他类中采用:
CCInjectUtil.inject(this, view) 传入一个view即可,这种和适合于Fragment在onCreatedView 及Adapter中使用**

6、JSON数据解析、数据加密及常用工具方法使用:详情查看cc.sdkutil.controller.util

7、重新设计的异步访问cc.sdkutil.controller.core包下的CCAsyncHandler,在cc.sdkutil.controller.cache包下的内存及磁盘缓存中有详细使用方法

8、参考iOS开发重新设计的观察者模式cc.sdkutil.controller.core下的CCAbsObservable、CCObservable、CCObserver

// 首先在需要观察这类中实现CCObserver接口,可以是Fragment,Activity或者其他任何类中
    // 以Activity为例
    // 在onCreate中注册观察着
    CCObservable.newInstance().registerObserver("category", this);
    
    // onDestroy注销观察者
    CCObservable.newInstance().unRegisterObserver("category", this);
    
    // 其余任何地方想告知观察者做出相应
    CCObservable.newInstance().notifyObserver("category", objs...);