Giter Site home page Giter Site logo

jungilhan / awesome-blogs-android Goto Github PK

View Code? Open in Web Editor NEW
135.0 13.0 32.0 6.73 MB

어썸블로그 ・ 개발 블로그 모음 ・ 개발 잡덕들을 위한 본격 고퀄리티 개발 블로그 큐레이션 서비스 🕵️‍♀️

Java 89.50% CSS 3.66% JavaScript 5.30% HTML 1.55%
android awesome-list rxjava realm retrofit2 coordinator

awesome-blogs-android's People

Contributors

benjaminkim avatar jungilhan avatar seongugjung avatar soulkeykim avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

awesome-blogs-android's Issues

Entry에 created_at 추가하기

  1. 로컬 데이터베이스에 Entry가 Insert되는 시점의(created_at) 시간 정보가 필요, 이 필드는 업데이트 되지 않도록
  2. 서버에서 내려주는 updated_at은 블로그 글 작성자가 미래 시간으로 설정 할 수 있는 문제가 있음
  3. 현재 글 정렬 순서는 서버가 내려주는 순서(updated_at 기준)로 보여주고 있지만 created_at 기준으로 재정렬 할 필요가 있음 (현재는 2번 항목에 의해 항상 앞쪽에 노출될 가능성이 존재)

[Crashlytics #7] TransactionTooLargeException

Summary로 전달되는 Html 문자열 크기가 Intent로 넘기기에 큰 경우가 있는 것으로 확인

Caused by android.os.TransactionTooLargeException
android.os.BinderProxy.transactNative (Binder.java)
android.app.Activity.startActivity (Activity.java:4230)
org.petabytes.awesomeblogs.feeds.EntryDiagonalCoordinator.onBottomContainerClick (SourceFile:63)
org.petabytes.awesomeblogs.feeds.EntryDiagonalCoordinator$$ViewBinder$2.doClick (SourceFile:39)
butterknife.internal.DebouncingOnClickListener.onClick (SourceFile:22)
android.view.View.performClick (View.java:5207)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:628)

[Crashlytics #3] SummaryView, 본문 내 링크가 상대경로 일 때 실행할 수 있는 액티비티를 찾지 못하는 버그

Fatal Exception: android.content.ActivityNotFoundException
Activity found to handle Intent { act=android.intent.action.VIEW dat=/2017/02/15/using-shs-as-webfonts.html } 
Raw Text android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1878) 
android.app.Activity.startActivity (Activity.java:4535) 
org.petabytes.awesomeblogs.summary.SummaryCoordinator.lambda$onMoreClick$5 (SourceFile:93) 
org.petabytes.awesomeblogs.summary.SummaryCoordinator$$Lambda$6.onClick (Unknown Source) 
android.view.View.performClick (View.java:5702) 
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

백그라운드 피드 요청 시각화하기

  • 포켓 앱처럼 콜드 스타트 시 혹은 카테고리 선택 시(로컬 Entry가 만료돼 됐을 떄) 클라이언트 데이터를 우선 보여주되, 백그라운드로 요청되는 상태를 프로그레스바 형태로 시각화하기
  • Swipe Refresh의 로딩 UI도 같은 형태로 수정 필요

빌드하고 실행하면 앱 죽음.

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: org.petabytes.awesomeblogs.debug, PID: 3262
                  java.lang.IllegalArgumentException: Unknown pattern character 'X'
                      at java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323)
                      at java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312)
                      at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:365)
                      at org.petabytes.awesomeblogs.feeds.EntryGradientCoordinator.attach(EntryGradientCoordinator.java:49)
                      at com.squareup.coordinators.Binding.onViewAttachedToWindow(Binding.java:38)
                      at com.squareup.coordinators.Coordinators.bind(Coordinators.java:43)
                      at org.petabytes.awesomeblogs.feeds.FeedsCoordinator$1.create(FeedsCoordinator.java:72)
                      at org.petabytes.awesomeblogs.feeds.FeedsCoordinator$1.create(FeedsCoordinator.java:66)
                      at org.petabytes.coordinator.PagerAdapter.instantiateItem(PagerAdapter.java:27)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.addNewItem(VerticalViewPager.java:729)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.populate(VerticalViewPager.java:879)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.populate(VerticalViewPager.java:811)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.onMeasure(VerticalViewPager.java:1334)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                      at android.view.Choreographer.doFrame(Choreographer.java:606)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                  	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteI
I/Process: Sending signal. PID: 3262 SIG: 9
Application terminated.

Code 질문

    @Override
    public Observable<Feed> getFeed(@NonNull final String category) {
        return localSource.getFeed(category)
            .flatMap(new Func1<Feed, Observable<Feed>>() {
                @Override
                public Observable<Feed> call(@Nullable Feed feed) {
                    return feed != null ? Observable.just(feed)
                        .doOnTerminate(new Action0() {
                            @Override
                            public void call() {
                                remoteSource.getFeed(category)
                                    .onErrorResumeNext(Observable.<Feed>empty())
                                    .subscribe();
                            }
                        }) : remoteSource.getFeed(category);
                }
            });
    }

여기서 의도하는게 local 에 있으면 로컬 먼저
로컬에 없으면 remote 로 가져 올려는 건가요?
doOnTerminate 안에 있는게 어떤걸 하는건지 정확히 모르겠어요~

항상 remote 에 질의하는거라면 local expire 타임을 정하고

Observable.concat 을 쓰는게 어떠까요?

Api module retrolambda 적용

api 쪽에만 retrolambda 가 없는거 같아요

buildscript 는 공통으로 사용하면 좋을거 같은데 어떤가요?

CI 연동

  • 테스트 깨짐 방지
  • 테스트 코드 커버리지 확인

시간 정보 나타낼 때 단수 복수 표기

별 이슈는 아니지만 1 days ago, 1 hours ago 라고 복수형으로 쓰이는데 단수형 처리까지되면 깔끔할 듯 합니다. (시간이 눈에 크게 보이다보니 자주보여서 제보 ^^)

특정 글을 불러올떄 내용이 짤리는 현상

앱을 사용할 때
네이버 포스팅이 제대로 보이지 않는 버그가 있습니다. (ex 티몬)

제 기기에서만 발생하는 문젠가 싶기도하구요 -_-
제 기기는 KT 갤럭시 S5 광대역 LTE 입니다.

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.