Giter VIP home page Giter VIP logo

cube-sdk's Issues

setImageRounded 失效

setImageFadeIn(false);
setImageRounded(true,xx) ;

这两个方法同时调用时,圆角效果会失效

crash

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)

短时间内重复启动引起ANR

使用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'
}

初始化代码直接复制:https://github.com/liaohuqiu/android-cube-app/blob/master/src/in/srain/cube/demo/app/CubeDemoApplication.java

在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!

doesnt load the lib

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>

goToThisFragment 里面隐藏的bug

对于以下应用场景:
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;
}

缓存时间

qq 20150721143818
qq 20150721144013
操作步骤:打开界面有网情况下正常请求获取数据后,关闭网络,3S后重新请求数据返回type是USE_CACHE_NOT_EXPIRED

请求的timeout问题

请求超时以后,并没有把请求取消掉,请求完成以后还是会回调onRequestFinish,这个是bug还是就这么设计的?

Make displaying image faster.

If necessary, cube-sdk will download image into memory and display it. Then cache it into disk in a background thread.

DefaultImageResizer

DefaultImageResizer 49行:
final int halfHeight = originWidth / 2;
final int halfWidth = originHeight / 2;
是否应该是
final int halfHeight = originHeight / 2;
final int halfWidth = originWidth / 2;

新需求

  1. ptr加入上拉加载更多
  2. Tab示例加上数据 类似网易新闻 然后引入缓存机制就完美了

关于上拉加载

我使用了LoadMoreListViewContainer来做上拉加载,但是发现貌似只有自动加载更多,以及点击加载更多,而没有上拉加载更多(像下拉刷新那样子,有一个拉上去的效果)?

短时间内重复启动引起ANR

使用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'
}

初始化代码直接复制:https://github.com/liaohuqiu/android-cube-app/blob/master/src/in/srain/cube/demo/app/CubeDemoApplication.java

在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!

优化建议

Cube ImageLoader真心强大,赞!如果能够支持加载指定的本地图片就更完美了,例如支持file:///sdcard/test/image.jpg !

关于Cube网络请求调用缓存的BUG

在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);
             }
        }

Error in downloadBitmap

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

onLoadError() for ImageLoadHandler

  1. ImageLoadHandler should have a method onLoadError() which will be called when some errors arise when loading the image.
  2. DefaultImageLoadHandler should implement onLoadError()

请教一个关于该sdk设计**的问题

拜读过部分代码,想问下在mints.base包下

为什么是用继承以及抽象的方式来进行封装

而不用组合和接口的形式封装,这样不是更灵活吗

是出于什么考虑呢?请赐教

Fragment的大小

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的高度没显示全屏问题

新浪图片压缩问题

正常情况下,从新浪获取的图片没问题。

但是,当从新浪请求成千上万张图片时,少量图片会被压缩成gzip传输,所以,demo显示这些图片是红色方块。

希望能改进。谢谢

再按一次退出问题

CubeFragmentActivity中148行
if (!mCloseWarned && closeWarningHint != null && closeWarningHint.length() == 0) {
最后的判断是否应该是">"?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.