Giter Club home page Giter Club logo

wanandroidmaster's Introduction

WanAndroidMaster

根据 http://www.wanandroid.com 提供api ,编写 包含 Material Design + MVP + Rxjava2 + Retrofit + Glide项目

该项目主要学习 mvp 和 rx+ retrofit 一套

版本迭代

v1.1.2 添加清明节灰白背景,修复登录sp紊乱等bug

v1.1.1 添加walle 多渠道打包

v1.1.0 添加微信公众号模块

前言

拉一波 浏览量 本人博客

  1. 代码尽力遵循了阿里巴巴Java开发规范和阿里巴巴Android开发规范,并有良好的注释。
  2. 使用Rxjava2结合Retrofit2进行网络请求
  3. 使用MVP 分层该项目业务,条理清晰。
  4. 使用Material Design中的Behavior集合ToolBar实现了响应式的“上失下现”特效 ,提升阅读的便利性。
  5. 使用SmartRefreshLayout丰富的刷新动画将项目的美提升了一个档次。

感谢

  1. 弘扬大佬提供的API 接口
  2. 部分图标 资源
  3. tab 和 viewpager 的集合
  4. SmartRefreshLayout
  5. 代码布局借鉴

部分界面效果图

1.首页

image

  1. 体系界面

image

  1. 微信公众号界面

image

3.项目界面

image

4.我的界面

image

  1. 详情界面

image

6.基础信息列表界面

image

7.热门网站界面

image

8.搜索界面

image

wanandroidmaster's People

Contributors

yangmingchuan 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

Watchers

 avatar  avatar  avatar  avatar

wanandroidmaster's Issues

运行下载的项目编译出错

我在刚下载下来项目编译时出错,不知道什么原因,能帮帮忙吗?
Android Studio 版本:3.2
build gradle 3.2.0
应该与依赖的butterknife插件有关
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'packageForR' for task ':app:processDebugResources' of type com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask. at org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:83) at org.gradle.internal.metaobject.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:61) at com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask_Decorated.getProperty(Unknown Source) at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:174) at groovy.lang.Closure.getPropertyTryThese(Closure.java:312) at groovy.lang.Closure.getPropertyDelegateFirst(Closure.java:302) at groovy.lang.Closure.getProperty(Closure.java:287) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:50) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307) at butterknife.plugin.ButterKnifePlugin$_apply_closure1$_closure2$_closure3$_closure4.doCall(ButterKnifePlugin.groovy:31) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:430) at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:726) at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:699) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95) ... 108 more

baseActivity 中 netEvent内存泄漏

In cn.white.ymc.wanandroidmaster:1.0:1.

  • cn.white.ymc.wanandroidmaster.ui.home.HomeActivity has leaked:

  • static BaseActivity.!(netEvent)!

  • ↳ HomeActivity

  • Reference Key: c8d4c552-fe3f-4f6d-b4c7-019d71669e32

  • Device: Xiaomi Xiaomi MIX 2 chiron

  • Android Version: 8.0.0 API: 26 LeakCanary: 1.6.2 0ebc1fc

  • Durations: watch=5669ms, gc=134ms, heap dump=1176ms, analysis=4615ms

  • Details:

  • Class cn.white.ymc.wanandroidmaster.base.BaseActivity
    | static $classOverhead = byte[4]@317498225 (0x12eca371)
    | static netEvent = cn.white.ymc.wanandroidmaster.ui.home.HomeActivity@317493480 (0x12ec90e8)

  • Instance of cn.white.ymc.wanandroidmaster.ui.home.HomeActivity
    | static $classOverhead = byte[4288]@317493817 (0x12ec9239)
    | floatButton = android.support.design.widget.FloatingActionButton@317682920 (0x12ef74e8)
    | fragmentList = java.util.ArrayList@317683536 (0x12ef7750)
    | frameLayout = android.widget.FrameLayout@317683560 (0x12ef7768)
    | lastIndex = 0
    | mExitTime = 0
    | mOnNavigationItemSelectedListener = cn.white.ymc.wanandroidmaster.ui.home.HomeActivity$1@317684208 (0x12ef79f0)
    | navigation = android.support.design.widget.BottomNavigationView@317684224 (0x12ef7a00)
    | toolbarCommon = android.support.v7.widget.Toolbar@317684896 (0x12ef7ca0)
    | activity = cn.white.ymc.wanandroidmaster.ui.home.HomeActivity@317493480 (0x12ec90e8)
    | appDavikActivityUtil = cn.white.ymc.wanandroidmaster.util.davik.AppDavikActivityUtil@317685672 (0x12ef7fa8)
    | bun = cn.white.ymc.wanandroidmaster.ui.home.HomeActivity_ViewBinding@317685680 (0x12ef7fb0)
    | context = cn.white.ymc.wanandroidmaster.base.MyApplication@317620144 (0x12ee7fb0)
    | mDelegate = android.support.v7.app.AppCompatDelegateImplN@317685696 (0x12ef7fc0)
    | mResources = null
    | mThemeId = 2131624234
    | mCreated = true
    | mFragments = android.support.v4.app.FragmentController@317685840 (0x12ef8050)
    | mHandler = android.support.v4.app.FragmentActivity$1@317685856 (0x12ef8060)
    | mLoaderManager = null
    | mNextCandidateRequestIndex = 0
    | mPendingFragmentActivityResults = android.support.v4.util.SparseArrayCompat@317685888 (0x12ef8080)
    | mReallyStopped = false
    | mRequestedPermissionsFromFragment = false
    | mResumed = true
    | mRetaining = false
    | mStopped = false
    | mViewModelStore = null
    | mStartedActivityFromFragment = false
    | mStartedIntentSenderFromFragment = false
    | mExtraDataMap = android.support.v4.util.SimpleArrayMap@317685912 (0x12ef8098)
    | mLifecycleRegistry = android.arch.lifecycle.LifecycleRegistry@317685936 (0x12ef80b0)
    | mActionBar = null
    | mActionModeTypeStarting = 0
    | mActivityInfo = android.content.pm.ActivityInfo@317685968 (0x12ef80d0)
    | mActivityTransitionState = android.app.ActivityTransitionState@317686120 (0x12ef8168)
    | mApplication = cn.white.ymc.wanandroidmaster.base.MyApplication@317620144 (0x12ee7fb0)
    | mAutoFillResetNeeded = false
    | mAutofillManager = null
    | mAutofillPopupWindow = null
    | mCalled = true
    | mChangeCanvasToTranslucent = false
    | mChangingConfigurations = false
    | mComponent = android.content.ComponentName@317686176 (0x12ef81a0)
    | mConfigChangeFlags = 0
    | mCurrentConfig = android.content.res.Configuration@317686192 (0x12ef81b0)
    | mDecor = com.android.internal.policy.DecorView@317456680 (0x12ec0128)
    | mDefaultKeyMode = 0
    | mDefaultKeySsb = null
    | mDestroyed = false
    | mDoReportFullyDrawn = false
    | mEmbeddedID = null
    | mEnableDefaultActionBarUp = false
    | mEnterTransitionListener = android.app.SharedElementCallback$1@1872954312 (0x6fa303c8)
    | mExitTransitionListener = android.app.SharedElementCallback$1@1872954312 (0x6fa303c8)
    | mFinished = false
    | mFragments = android.app.FragmentController@317686312 (0x12ef8228)
    | mHandler = android.os.Handler@317686328 (0x12ef8238)
    | mHasCurrentPermissionsRequest = false
    | mIdent = 247401085
    | mInstanceTracker = android.os.StrictMode$InstanceTracker@317686360 (0x12ef8258)
    | mInstrumentation = android.app.Instrumentation@317686376 (0x12ef8268)
    | mIntent = android.content.Intent@317686448 (0x12ef82b0)
    | mInterceptor = miui.contentcatcher.InterceptorProxy@317511208 (0x12ecd628)
    | mLastAutofillId = 1073741823
    | mLastNonConfigurationInstances = null
    | mMainThread = android.app.ActivityThread@317458968 (0x12ec0a18)
    | mManagedCursors = java.util.ArrayList@317686520 (0x12ef82f8)
    | mManagedDialogs = null
    | mMenuInflater = null
    | mParent = null
    | mReferrer = "cn.white.ymc.wanandroidmaster"
    | mResultCode = 0
    | mResultData = null
    | mResumed = true
    | mSearchEvent = null
    | mSearchManager = null
    | mStartedActivity = false
    | mStopped = false
    | mTaskDescription = android.app.ActivityManager$TaskDescription@317686592 (0x12ef8340)
    | mTemporaryPause = false
    | mTitle = "WanAndroid"
    | mTitleColor = 0
    | mTitleReady = true
    | mToken = android.os.BinderProxy@317682592 (0x12ef73a0)
    | mTranslucentCallback = null
    | mUiThread = java.lang.Thread@1930491856 (0x7310f7d0)
    | mVisibleBehind = false
    | mVisibleFromClient = true
    | mVisibleFromServer = true
    | mVoiceInteractor = null
    | mWindow = com.android.internal.policy.PhoneWindow@317493112 (0x12ec8f78)
    | mWindowAdded = true
    | mWindowManager = android.view.WindowManagerImpl@317682832 (0x12ef7490)
    | mInflater = com.android.internal.policy.PhoneLayoutInflater@317682016 (0x12ef7160)
    | mOverrideConfiguration = null
    | mResources = android.content.res.MiuiResources@317686632 (0x12ef8368)
    | mTheme = android.content.res.Resources$Theme@317686680 (0x12ef8398)
    | mThemeResource = 2131624234
    | mBase = android.app.ContextImpl@317686696 (0x12ef83a8)
    | shadow$klass = cn.white.ymc.wanandroidmaster.ui.home.HomeActivity
    | shadow$monitor = -2000022903

  • Excluded Refs:
    | Field: android.os.Message.obj
    | Field: android.os.Message.next
    | Field: android.os.Message.target
    | Field: android.view.inputmethod.InputMethodManager.mNextServedView
    | Field: android.view.inputmethod.InputMethodManager.mServedView
    | Field: android.view.inputmethod.InputMethodManager.mServedInputConnection
    | Field: android.view.inputmethod.InputMethodManager.mCurRootView
    | Field: android.accounts.AccountManager$AmsTask$Response.this$1
    | Field: android.view.accessibility.AccessibilityNodeInfo.mOriginalText
    | Field: com.android.internal.policy.BackdropFrameRenderer.mDecorView
    | Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always)
    | Thread:FinalizerWatchdogDaemon (always)
    | Thread:main (always)
    | Thread:LeakCanary-Heap-Dump (always)
    | Class:java.lang.ref.WeakReference (always)
    | Class:java.lang.ref.SoftReference (always)
    | Class:java.lang.ref.PhantomReference (always)
    | Class:java.lang.ref.Finalizer (always)
    | Class:java.lang.ref.FinalizerReference (always)」
    —————————

model层

请问下model层怎么设计的
image
感觉都写到了p层里边

运行项目出错啦

Android resource linking failed
C:\Users\jinhu\Desktop\WanAndroidMaster\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:2781: error: resource android:attr/fontVariationSettings not found.
C:\Users\jinhu\Desktop\WanAndroidMaster\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:2781: error: resource android:attr/ttcIndex not found.
error: failed linking references.

应该是缺少了2个资源文件...

请教一个问题

请教一个问题: if (!currentFragment.isAdded())
getSupportFragmentManager().beginTransaction().remove(currentFragment).commit();
为什么判断了没有添加过currentFragment,还要去remove(currentFragment)
private void selectFragment(int index) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment currentFragment = fragmentList.get(index); Fragment lastFragment = fragmentList.get(lastIndex);// 上一次显示的Fragment lastIndex = index; ft.hide(lastFragment); if (!currentFragment.isAdded()) { getSupportFragmentManager().beginTransaction().remove(currentFragment).commit(); ft.add(R.id.frame_layout, currentFragment); } ft.show(currentFragment); ft.commitAllowingStateLoss(); }

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.