liaohuqiu / cube-sdk Goto Github PK
View Code? Open in Web Editor NEWA light package for Android development, it handles loading image and network request.
Home Page: http://cube-sdk.liaohuqiu.net/
License: Apache License 2.0
A light package for Android development, it handles loading image and network request.
Home Page: http://cube-sdk.liaohuqiu.net/
License: Apache License 2.0
打开小图后,再打开大图也被切成圆角了
when a fast scroll is made, clean layout.
it seems like it doesn't find the lib
Error:Failed to find: in.srain.cube:cube-sdk:1.0.43-SNAPSHOT
<a href="openFile">Open File</a><br><a href="open.dependency.in.project.structure">Open in Project Structure dialog</a>
request.send();
这个方法 sever 端能区分出是什么类型的请求么
@l555iu .
Now it is red.
ImageLoadHandler
should have a method onLoadError()
which will be called when some errors arise when loading the image.DefaultImageLoadHandler
should implement onLoadError()
使用gradle直接引入sdk:
compile('in.srain.cube:cube-sdk:1.0.44.16-SNAPSHOT@aar') {
exclude group: 'in.srain.cube', module: 'clog'
}
compile('in.srain.cube:ultra-ptr:1.0.8.3-SNAPSHOT@aar') {
exclude group: 'in.srain.cube', module: 'clog'
}
在fragment中使用的,fragment直接复制:https://github.com/liaohuqiu/android-cube-app/blob/master/src/in/srain/cube/demo/ui/loadmore/LoadMoreListViewFragment.java
出现bug:应用短时间内重复启动会有一定概率anr,整个应用会报错退出。
log:
03-15 20:07:46.428 30239-30732/com.skydragron.wechatfriends I/System.out﹕ [CDS]rx timeout:0
03-15 20:07:46.428 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: interp stack at 0x52d67000
03-15 20:07:46.428 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: created from interp
03-15 20:07:46.429 30239-30239/com.skydragron.wechatfriends D/dalvikvm﹕ start new thread
03-15 20:07:46.435 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: notify debugger
03-15 20:07:46.435 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16 (cube-simple-request-manager): calling run()
03-15 20:07:46.436 30239-30733/com.skydragron.wechatfriends I/System.out﹕ [CDS]rx timeout:0
03-15 20:07:46.794 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: exiting
03-15 20:07:46.794 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: bye!
03-15 20:07:46.800 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ create interp thread : stack size=32KB
03-15 20:07:46.801 30239-30730/com.skydragron.wechatfriends D/cube-disk-cache-provider﹕ 1000, flushDiskCacheAsyncWithDelay
03-15 20:07:46.801 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ create new thread
03-15 20:07:46.801 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ new thread created
03-15 20:07:46.802 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ update thread list
03-15 20:07:46.803 30239-30732/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: exiting
03-15 20:07:46.803 30239-30732/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: bye!
03-15 20:07:46.838 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: interp stack at 0x52d67000
03-15 20:07:46.838 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: created from interp
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ start new thread
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=13: exiting
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends W/dalvikvm﹕ threadid=13: thread exiting with uncaught exception (group=0x41889a58)
03-15 20:07:46.839 30239-30731/com.skydragron.wechatfriends E/AndroidRuntime﹕ FATAL EXCEPTION: simple-executor-pool-1-thread-27
java.lang.IllegalStateException
at in.srain.cube.diskcache.CacheEntry.newOutputStream(CacheEntry.java:104)
at in.srain.cube.diskcache.CacheEntry.setString(CacheEntry.java:86)
at in.srain.cube.cache.DiskCacheProvider.write(DiskCacheProvider.java:59)
at in.srain.cube.cache.CacheManager$2.run(CacheManager.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:838)
03-15 20:07:46.842 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: notify debugger
03-15 20:07:46.842 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15 (simple-executor-pool-1-thread-28): calling run()
03-15 20:07:46.911 30239-30241/com.skydragron.wechatfriends D/dalvikvm﹕ GC_CONCURRENT freed 519K, 11% free 9318K/10371K, paused 26ms+21ms, total 134ms
03-15 20:07:46.949 30239-30239/com.skydragron.wechatfriends I/SurfaceTextureClient﹕ STC::queueBuffer fps:33.93, dur:1002.05, max:121.00, min:10.86
03-15 20:07:47.100 30239-30239/com.skydragron.wechatfriends V/InputMethodManager﹕ focusOut: android.widget.ListView@42205f70 mServedView=android.widget.ListView@42205f70 winFocus=false
03-15 20:07:47.160 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 0)
03-15 20:07:47.185 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 1)
03-15 20:07:47.193 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 0)
03-15 20:07:47.802 30239-30730/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=11: exiting
03-15 20:07:47.802 30239-30730/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=11: bye!
03-15 20:07:47.844 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: exiting
03-15 20:07:47.844 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: bye!
看了demo和代码上拉加载智能使用这两个View?
使用gradle直接引入sdk:
compile('in.srain.cube:cube-sdk:1.0.44.16-SNAPSHOT@aar') {
exclude group: 'in.srain.cube', module: 'clog'
}
compile('in.srain.cube:ultra-ptr:1.0.8.3-SNAPSHOT@aar') {
exclude group: 'in.srain.cube', module: 'clog'
}
在fragment中使用的,fragment直接复制:https://github.com/liaohuqiu/android-cube-app/blob/master/src/in/srain/cube/demo/ui/loadmore/LoadMoreListViewFragment.java
出现bug:应用短时间内重复启动会有一定概率anr,整个应用会报错退出。
log:
03-15 20:07:46.428 30239-30732/com.skydragron.wechatfriends I/System.out﹕ [CDS]rx timeout:0
03-15 20:07:46.428 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: interp stack at 0x52d67000
03-15 20:07:46.428 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: created from interp
03-15 20:07:46.429 30239-30239/com.skydragron.wechatfriends D/dalvikvm﹕ start new thread
03-15 20:07:46.435 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: notify debugger
03-15 20:07:46.435 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16 (cube-simple-request-manager): calling run()
03-15 20:07:46.436 30239-30733/com.skydragron.wechatfriends I/System.out﹕ [CDS]rx timeout:0
03-15 20:07:46.794 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: exiting
03-15 20:07:46.794 30239-30733/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=16: bye!
03-15 20:07:46.800 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ create interp thread : stack size=32KB
03-15 20:07:46.801 30239-30730/com.skydragron.wechatfriends D/cube-disk-cache-provider﹕ 1000, flushDiskCacheAsyncWithDelay
03-15 20:07:46.801 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ create new thread
03-15 20:07:46.801 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ new thread created
03-15 20:07:46.802 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ update thread list
03-15 20:07:46.803 30239-30732/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: exiting
03-15 20:07:46.803 30239-30732/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: bye!
03-15 20:07:46.838 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: interp stack at 0x52d67000
03-15 20:07:46.838 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: created from interp
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ start new thread
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=13: exiting
03-15 20:07:46.838 30239-30731/com.skydragron.wechatfriends W/dalvikvm﹕ threadid=13: thread exiting with uncaught exception (group=0x41889a58)
03-15 20:07:46.839 30239-30731/com.skydragron.wechatfriends E/AndroidRuntime﹕ FATAL EXCEPTION: simple-executor-pool-1-thread-27
java.lang.IllegalStateException
at in.srain.cube.diskcache.CacheEntry.newOutputStream(CacheEntry.java:104)
at in.srain.cube.diskcache.CacheEntry.setString(CacheEntry.java:86)
at in.srain.cube.cache.DiskCacheProvider.write(DiskCacheProvider.java:59)
at in.srain.cube.cache.CacheManager$2.run(CacheManager.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:838)
03-15 20:07:46.842 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: notify debugger
03-15 20:07:46.842 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15 (simple-executor-pool-1-thread-28): calling run()
03-15 20:07:46.911 30239-30241/com.skydragron.wechatfriends D/dalvikvm﹕ GC_CONCURRENT freed 519K, 11% free 9318K/10371K, paused 26ms+21ms, total 134ms
03-15 20:07:46.949 30239-30239/com.skydragron.wechatfriends I/SurfaceTextureClient﹕ [STC::queueBuffer] (this:0x416a5c00) fps:33.93, dur:1002.05, max:121.00, min:10.86
03-15 20:07:47.100 30239-30239/com.skydragron.wechatfriends V/InputMethodManager﹕ focusOut: android.widget.ListView@42205f70 mServedView=android.widget.ListView@42205f70 winFocus=false
03-15 20:07:47.160 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 0)
03-15 20:07:47.185 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 1)
03-15 20:07:47.193 30239-30239/com.skydragron.wechatfriends D/OpenGLRenderer﹕ Flushing caches (mode 0)
03-15 20:07:47.802 30239-30730/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=11: exiting
03-15 20:07:47.802 30239-30730/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=11: bye!
03-15 20:07:47.844 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: exiting
03-15 20:07:47.844 30239-30734/com.skydragron.wechatfriends D/dalvikvm﹕ threadid=15: bye!
DefaultImageResizer 49行:
final int halfHeight = originWidth / 2;
final int halfWidth = originHeight / 2;
是否应该是
final int halfHeight = originHeight / 2;
final int halfWidth = originWidth / 2;
I used CubeImageView.loadImage as follow:
cubeImageView.loadImage(imageLoader,"http://imgd.wbiao.cn/201202/01/7789_50670.jpg");
but when i turn off network,I get these error:
Error in downloadBitmap - java.net.UnknownHostException: Unable to resolve host "imgd.wbiao.cn": No address associated with hostname
1 0x0 download fail: 56bbce4e4d50168ec7a5d717c644b1f4
1 0x0 fetch bitmap fail. file cache key: 56bbce4e4d50168ec7a5d717c644b1f4
Cube ImageLoader真心强大,赞!如果能够支持加载指定的本地图片就更完美了,例如支持file:///sdcard/test/image.jpg !
在CacheAbleRequest类中, public void onRequestFail(FailData failData) {}方法中的
if(null != this.mHandler) {
this.mHandler.onRequestFail(failData);
if(this.mCacheData != null && !this.cacheIsDisabled() && !this.mUseCacheAnyway) {
this.notifyRequestFinish(CacheAbleRequest.ResultType.USE_CACHE_ON_FAIL, this.mCacheData, true);
}
}
这段代码在满足条件的情况下会执行onRequestFail和notifyRequestFinish,导致回调时执行onRequestFail和onCacheAbleRequestFinish方法。对于APP来说判断不好使用,既执行了失败,又成功返回了结果。如果在不影响其他功能的情况下,建议改为 if(null != this.mHandler) {
if(this.mCacheData != null && !this.cacheIsDisabled() && !this.mUseCacheAnyway) {
this.notifyRequestFinish(CacheAbleRequest.ResultType.USE_CACHE_ON_FAIL, this.mCacheData, true);
}else{
this.mHandler.onRequestFail(failData);
}
}
请求超时以后,并没有把请求取消掉,请求完成以后还是会回调onRequestFinish,这个是bug还是就这么设计的?
CubeFragmentActivity中148行
if (!mCloseWarned && closeWarningHint != null && closeWarningHint.length() == 0) {
最后的判断是否应该是">"?
CubeFragmentActivity类的goToThisFragment方法中
if (mCurrentFragment != null) {
if(mCurrentFragment != fragment){
mCurrentFragment.onLeave();
}else{
return;
}
}
这样写是不是好点,当重复添加时避免按返回键出问题(例如重复添加了5次,需要按返回键5次才出再按一次退出)
TitleBaseFragment类的onCreateView方法中
ViewGroup view = (ViewGroup) inflater.inflate(getFrameLayoutId(), container,false);这样就能避免CubeFragmentActivity中添加的Fragment的高度没显示全屏问题
图片尺寸的排列顺序应为从小到大
setImageFadeIn(false);
setImageRounded(true,xx) ;
这两个方法同时调用时,圆角效果会失效
对于以下应用场景:
A-fragment-1 ----> B-fragment -----> A-fragment-2
其中A-fragment-1和A-fragment-2是同一个fragment文件
在需要push A-fragment-2时,就会发生重用A-fragment-1的情况,出现该问题的原因是getFragmentTag这个方法,导致
CubeFragment fragment = (CubeFragment) fm.findFragmentByTag(fragmentTag);
获取上次的fragment 实例
protected String getFragmentTag(FragmentParam param) {
StringBuilder sb = new StringBuilder(param.cls.toString());
return sb.toString();
}
private void goToThisFragment(FragmentParam param) {
int containerId = getFragmentContainerId();
Class<?> cls = param.cls;
if (cls == null) {
return;
}
try {
String fragmentTag = getFragmentTag(param);
FragmentManager fm = getSupportFragmentManager();
if (DEBUG) {
CLog.d(LOG_TAG, "before operate, stack entry count: %s", fm.getBackStackEntryCount());
}
CubeFragment fragment = (CubeFragment) fm.findFragmentByTag(fragmentTag);
if (fragment == null) {
fragment = (CubeFragment) cls.newInstance();
}
if (mCurrentFragment != null && mCurrentFragment != fragment) {
mCurrentFragment.onLeave();
}
fragment.onEnter(param.data);
FragmentTransaction ft = fm.beginTransaction();
if (fragment.isAdded()) {
if (DEBUG) {
CLog.d(LOG_TAG, "%s has been added, will be shown again.", fragmentTag);
}
ft.show(fragment);
} else {
if (DEBUG) {
CLog.d(LOG_TAG, "%s is added.", fragmentTag);
}
ft.add(containerId, fragment, fragmentTag);
}
mCurrentFragment = fragment;
ft.addToBackStack(fragmentTag);
ft.commitAllowingStateLoss();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
mCloseWarned = false;
}
我使用了LoadMoreListViewContainer来做上拉加载,但是发现貌似只有自动加载更多,以及点击加载更多,而没有上拉加载更多(像下拉刷新那样子,有一个拉上去的效果)?
Inside this method to determine where you must add a condition (activeNetworkInfo.isConnected())
怎么设置,让demo中轮播图不让循环滚动。谢谢
正常情况下,从新浪获取的图片没问题。
但是,当从新浪请求成千上万张图片时,少量图片会被压缩成gzip传输,所以,demo显示这些图片是红色方块。
希望能改进。谢谢
拜读过部分代码,想问下在mints.base包下
为什么是用继承以及抽象的方式来进行封装
而不用组合和接口的形式封装,这样不是更灵活吗
是出于什么考虑呢?请赐教
Process: in.srain.cube.sample, PID: 30597
java.lang.NullPointerException
at android.widget.Toast.<init>(Toast.java)
at android.widget.Toast.makeText(Toast.java)
at in.srain.cube.sample.ui.fragment.imagelist.GridListViewFragment$2$1.onData(GridListViewFragment.java:64)
at in.srain.cube.sample.data.DemoRequestData$4.onCacheAbleRequestFinish(DemoRequestData.java:109)
at in.srain.cube.sample.data.DemoRequestData$4.onCacheAbleRequestFinish(DemoRequestData.java:1)
at in.srain.cube.request.CacheAbleRequest.notifyRequestFinish(CacheAbleRequest.java:228)
at in.srain.cube.request.CacheAbleRequest.onRequestSuccess(CacheAbleRequest.java:70)
at in.srain.cube.request.SimpleRequestManager$1.handleMessage(SimpleRequestManager.java:30)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
If necessary, cube-sdk
will download image into memory and display it. Then cache it into disk in a background thread.
Error:Could not find in.srain.cube:cube-sdk:1.0.43-SNAPSHOT.
Required by:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.